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

发布于 2025-01-06 12:18:43 字数 393 浏览 0 评论 0原文

参考此 页面 处的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷荒 2025-01-13 12:18:43

TCP 端口只有 16 位宽,因此如果您的 port 变量包含 0..65535 范围之外的任何内容,无论如何都会出现问题。另外,您应该使用 ntohs 来解释字节序差异。

所以我建议类似:

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

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 use ntohs to account for endianess differences.

So I suggest something like:

BUG_ON(port < 0 || port > 65535);
return (ntohs(tcph->dest) == (u16)port) ? NF_DROP : NF_ACCEPT;
等风也等你 2025-01-13 12:18:43

为什么你想要端口 int32?端口必须是 uint16_t。大于 16 位的值是错误的。

Why you want to have port int32? port must be uint16_t. Value greater than 16 bit is wrong.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文