2012-02-15 2 views
0

Со ссылкой на код крючками Netfilter в этом pageПроверьте номер порта в модуль ядра Linux с помощью Netfilter

портовом сверять объявлен как:

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

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

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

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

Спасибо.

ответ

1

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

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

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

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

Смежные вопросы