Проверьте номер порта в модуле ядра Linux с помощью Netfilter - PullRequest
0 голосов
/ 15 февраля 2012

См. Код ловушки Netfilter на этой странице

Порт для проверки объявляется как:

/* Port we want to drop packets on */
static const uint16_t port = 25;

Сравнение производится как:

return (tcph->dest == port) ? NF_DROP : NF_ACCEPT;

Если переменная port имеет тип int32, как мы можем преобразовать его в uint16_t, чтобы его можно было проверить по tcph-> dest.

Спасибо.

Ответы [ 2 ]

1 голос
/ 16 февраля 2012
Порты

TCP имеют ширину только 16 бит, поэтому, если ваша переменная port содержит что-либо вне диапазона 0..65535, что-то не так в любом случае.Кроме того, вы должны использовать ntohs для учета различий порядка байтов.

Поэтому я предлагаю что-то вроде:

BUG_ON(port < 0 || port > 65535);
return (ntohs(tcph->dest) == (u16)port) ? NF_DROP : NF_ACCEPT;
0 голосов
/ 02 марта 2013

Почему вы хотите иметь порт int32?порт должен быть uint16_t.Значение больше 16 bit неверно.

...