gpt4 book ai didi

Linux 原始套接字 : Block Packets?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:44 25 4
gpt4 key购买 nike

我在 Linux 中编写了自己的数据包嗅探器。

我用 socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)) 打开一个套接字,然后处理以太网数据包——解压 ARP 数据包、IP 数据包(以及其中的 ICMP/TCP/UDP 数据包) .

到目前为止一切正常。

现在我可以像这样读取数据包 - 我还可以通过包装合适的以太网数据包并发送它来注入(inject)数据包。

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

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

但是,基本上,我希望如果我发现数据包有问题 - 不是来自正确的 MAC 地址,以某种方式畸形,或者只是违反安全策略 - 我可以直接“使用”数据包, 它不会进一步传送到网络服务器上。

因为我可以读取数据包和写入数据包 - 如果我也可以阻止数据包,那么我将拥有我所需要的一切。

基本上,我不只是想监控网络流量,有时还想控制它。例如。通过使用原始传入数据包,然后将稍有改动的新数据包写到不同的地址来“重新路由”数据包。或者只是根本不应该传送的普通 block 数据包。

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

换句话说,我有一个数据包嗅探器 - 但如果它嗅出有异味的东西,那么我希望它能够阻止该数据包。尽早丢弃它,这样它就不会被进一步传送到任何地方。

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

最佳答案

您要找的是libnetfilter_queue .文档仍然非常糟糕,但是 the code in this example应该让你开始。

我使用这个库开发了一个项目,该项目对网络数据包进行排队并在稍后重播它们。

关于Linux 原始套接字 : Block Packets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57192698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com