Проверьте номер порта в модуле ядра Linux с помощью Netfilter

Обратитесь к коду ловушки 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.

Спасибо.


person Jake    schedule 15.02.2012    source источник


Ответы (2)


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

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

BUG_ON(port < 0 || port > 65535);
return (ntohs(tcph->dest) == (u16)port) ? NF_DROP : NF_ACCEPT;
person fnl    schedule 15.02.2012

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

person Ibrar Ahmed    schedule 02.03.2013