使用Netfilter检查Linux内核模块中的端口号

时间:2012-02-15 18:36:00

标签: c linux kernel kernel-module netfilter

参考此page

上的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进行检查。

感谢。

2 个答案:

答案 0 :(得分:1)

TCP端口只有16位宽,因此如果您的port - 变量包含0..65535范围之外的任何内容,则无论如何都会出错。此外,您应使用ntohs来说明字节差异。

所以我建议像:

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

答案 1 :(得分:0)

为什么要拥有端口int32?端口必须是uint16_t。大于16 bit的值是错误的。