如何在 C++ 中创建客户端 UDP 套接字,以便它可以侦听另一个应用程序正在侦听的端口?换句话说,如何在 C++ 中应用端口复用?
问问题
2999 次
3 回答
3
我只想监听一个端口
你可以用嗅探器做到这一点。只需忽略来自不同端口的数据包。
我可能需要阻止它发送一些特定的数据包,因为我的程序将发送它而不是原始应用程序
好的,在这里我建议您丢弃嗅探器,并使用MITM技术。
您需要依靠 PREROUTING 防火墙规则将数据包转移到“代理”应用程序。假设 UDP、Linux、iptables 和“代理”运行在同一台主机上,“代理”实际上需要做的事情如下:
1.添加防火墙规则以转移数据包(如果您愿意,请手动执行):
iptables -t nat -A PREROUTING -i <iface> -p <proto> --dport <dport>
-j REDIRECT --to-port <newport>
2.绑定监听<newport>
。
3.中继 2 个端点(客户端和原始目的地)之间的所有流量。如果您在不同的主机上运行“代理”,请使用getsockopt来SO_ORIGINAL_DST
检索原始目标地址。
这听起来可能很棘手,但是......是的,那是因为它有点棘手:-) 如果我的假设不同,请查阅您的防火墙文档。
于 2010-10-07T05:23:23.450 回答
2
这只是像tcpdump
or一样的数据包嗅探snoop
,打开一个原始套接字并根据需要从电线和过滤器中拉出所有内容。您可能希望使用libpcap使事情变得更容易一些。
如果没有管理员或超级用户权限,您将需要目标应用程序打开适合平台的SO_REUSEADDR
端口。SO_REUSEPORT
需要注意的是您只能接收广播和多播数据包,单播数据包被传递到第一个打开的套接字。
于 2010-10-07T04:14:24.667 回答