Linux原始套接字:阻止数据包?

Linux原始套接字:阻止数据包?,linux,packet-sniffers,raw-sockets,raw-ethernet,Linux,Packet Sniffers,Raw Sockets,Raw Ethernet,我已经在Linux中编写了自己的包嗅探器 我用socket(AF_PACKET,SOCK_RAW,htons(ETH_p_ALL))打开一个socket,然后处理以太网数据包-解包ARP数据包、IP数据包(以及其中的ICMP/TCP/UDP数据包) 到目前为止,一切正常 现在我可以像这样读取数据包了——我也可以通过包装一个合适的以太网数据包并发送它来注入数据包 但我想要的是一种阻止数据包的方法——可以说是消费数据包,这样它们就不会被进一步传递到系统中 也就是说,如果一个TCP数据包被发送到端口8

我已经在Linux中编写了自己的包嗅探器

我用
socket(AF_PACKET,SOCK_RAW,htons(ETH_p_ALL))
打开一个socket,然后处理以太网数据包-解包ARP数据包、IP数据包(以及其中的ICMP/TCP/UDP数据包)

到目前为止,一切正常

现在我可以像这样读取数据包了——我也可以通过包装一个合适的以太网数据包并发送它来注入数据包

但我想要的是一种阻止数据包的方法——可以说是消费数据包,这样它们就不会被进一步传递到系统中

也就是说,如果一个TCP数据包被发送到端口80,那么我可以用我的数据包嗅探器看到该数据包,它将以通常的方式被发送到web服务器

但是,基本上,我希望如果我发现数据包有什么问题——不是来自正确的MAC地址,某种形式的错误,或者只是破坏了安全策略——我可以“消费”数据包,并且它不会进一步传递到web服务器上

因为我可以读数据包和写数据包——如果我也可以阻止数据包,那么我就拥有了我所需要的一切

基本上,我不只是想监控网络流量,有时还想控制网络流量。例如,“重新路由”一个数据包,方法是使用原始的传入数据包,然后将一个稍微改变的新数据包写入另一个地址。或者干脆阻止根本不应该传递的数据包

我的应用程序是一个通用的“网络流量管理”程序。监控和记录流量。但也可以控制它——作为防火墙阻止数据包,作为负载平衡器重新路由数据包

换句话说,我有一个包嗅探器——但是如果它嗅到了一些闻起来很难闻的东西,那么我希望它能够阻止那个包。尽早丢弃,这样就不会在任何地方进一步交付


(能够在通过的过程中更改数据包可能也很方便——但是如果我可以阻止,那么总是有可能完全阻止原始数据包,然后在其位置写出一个新的更改数据包。)

您正在寻找的是。文档仍然非常糟糕,但应该让您开始


我使用这个库开发了一个项目,该项目将网络数据包排队,并在以后重新播放。

谢谢。我不知道在Linux中可以从用户空间丢弃数据包。