我希望在该数据包出现tcp / ip层之前捕获一个数据包,并使用C ++和UI将其提供给用户空间。
我该怎么做?是Qt& Netfilter可以做到这一点吗?
答案 0 :(得分:2)
Qt在那里无助。你需要的是编写一个netlink NFQueue处理程序。当您的数据包与-j NFQUEUE规则匹配时,您的用户空间程序将接收这些数据包,允许您接受,删除或修改(修改)数据包(仅在mangle表中)。如果您可以使用GPLv2库,则应使用libnetfilter_queue来帮助您。
但请注意,mac图层不完整。这是因为网络代码需要支持各种设备类型,而某些非以太网设备没有MAc地址。在以太网设备上,您获得的通常只是发送方的MAC地址。
答案 1 :(得分:0)
您可以使用NFQUEUE和libnetfilter_queue。
iptables -t raw -I PREROUTING -p tcp -j NFQUEUE --queue-num 1
您可以在此网站中看到一个示例:
答案 2 :(得分:0)
您还可以使用称为“数据包套接字”的数据包。 它们用于在第2层发送或接收原始数据包。因此,基本上,数据包将直接到达您的程序,并且您可以在其上实现自己的第3层和第4层协议。 检查此官方手册页中的数据包套接字。