如何更改以太网数据包(来自NIC的数据包)?我可以使用Netfilter挂钩吗?

如何更改以太网数据包(来自NIC的数据包)?我可以使用Netfilter挂钩吗?

问题描述:

我想捕获一个数据包之前,该数据包出现tcp/ip层,并用C++和用户界面给用户空间。如何更改以太网数据包(来自NIC的数据包)?我可以使用Netfilter挂钩吗?

我该怎么做? Qt & Netfilter是否可以做到这一点?

+0

我想,当数据包从数据链路层交叉之前接收并改变它们将数据包发送到用户空间,然后发送更改的数据包到特定的网卡 –

Qt在那里是无奈的。你需要的是编写一个netlink NFQueue处理程序。当你的数据包与一个说明-j NFQUEUE的规则相匹配时,你的用户空间程序将接收这些数据包,允许你接受,丢弃或者修改(修改)数据包(只在mangle表中)。如果您可以使用GPLv2库,则应使用libnetfilter_queue来帮助您。

但请注意,mac层不完整。这是因为网络代码需要支持各种设备类型,并且一些非以太网设备没有MAc地址。在以太网设备上,通常只有发送者的MAC地址。

+0

非常感谢您的帮助,可以在将数据包在netfilter中预先路由之前对数据包进行排队,并将其挂接到用户空间并使用NFQueue处理程序处理队列 –

您可以使用NFQUEUE和libnetfilter_queue。

iptables -t raw -I PREROUTING -p tcp -j NFQUEUE --queue-num 1 

你可以看到在这个网站的例子:

libnetfilter_queue_samplecode

Iptables flow