gpt4 book ai didi

c - 在 C 中过滤 Linux 上的 UDP 环回

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:49 26 4
gpt4 key购买 nike

我有一个绑定(bind)到 eth0 的应用程序,它在端口 A 上将 UDP 数据包发送到 255.255.255.255。同时,我有一个UDP服务器绑定(bind)到eth0,0.0.0.0和端口A。

我想做的是确保服务器不会接收应用程序生成的消息(由内核纯粹在软件中处理),但它会接收网络中其他主机生成的消息。

我无法更改 UDP 数据包的负载,也无法向其添加任何 header 。

我已经使用 RTNETLINK 实现了一个解决方案来获取我所在机器的所有 IP 地址(并​​根据 recvfrom() 中的地址进行过滤),但我想知道是否有更简单、更清晰的方法解决方案。

编辑:我想到了一些类似标记 skb 的事情——标签会在离开物理接口(interface)后消失,但如果它只是在软件中路由则不会。

有什么想法吗?

最佳答案

如果您可以修补您的 Linux 内核,您可以使用 setsockopt() 选项来选择是否要环回您正在发送的广播数据包。

patch完全为此目的重用 IP_MULTICAST_LOOP 选项。

此外,您可以轻松添加自己的 setsockopt() 选项,而不是“弄乱”IP_MULTICAST_LOOP 选项,可能称为 IP_BROADCAST_NO_LOOP .这将保证您不会更改任何其他应用程序的行为。

关于c - 在 C 中过滤 Linux 上的 UDP 环回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1875105/

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