使用 Netfilter 检查 Linux 内核模块中的端口号
参考此 页面 处的 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 检查它。
谢谢。
Referring to the Netfilter hook code at this page
The port to be checked against is declared as:
/* Port we want to drop packets on */
static const uint16_t port = 25;
The comparison is made as:
return (tcph->dest == port) ? NF_DROP : NF_ACCEPT;
In case variable port was of type int32, how can we convert it to uint16_t so that it can be checked against tcph->dest.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
TCP 端口只有 16 位宽,因此如果您的
port
变量包含 0..65535 范围之外的任何内容,无论如何都会出现问题。另外,您应该使用ntohs
来解释字节序差异。所以我建议类似:
TCP ports are only 16 bit wide, so if your
port
-variable contains anything outside the range 0..65535, something is wrong anyway. Also, you should usentohs
to account for endianess differences.So I suggest something like:
为什么你想要端口
int32
?端口必须是 uint16_t。大于 16 位的值是错误的。Why you want to have port
int32
? port must be uint16_t. Value greater than 16bit
is wrong.