如何在C ++中创建客户端UDP套接字,以便它可以侦听另一个应用程序正在侦听的端口?换句话说,如何在C ++中应用端口多路复用?
答案 0 :(得分: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
来检索原始目标地址。
这可能听起来很棘手,但是......是的,那是因为它有点棘手:-) 如果我的假设不同,请查阅防火墙文档。
答案 1 :(得分:2)
这只是像tcpdump
或snoop
那样的数据包嗅探,打开一个原始套接字并根据需要从线路和过滤器中提取所有内容。您可能希望使用libpcap来使事情变得更容易。
如果没有管理员或超级用户权限,您将需要目标应用程序根据平台打开SO_REUSEADDR
和SO_REUSEPORT
端口。需要注意的是,您只能接收广播和组播数据包,单播数据包将被传送到第一个打开的套接字。
答案 2 :(得分:1)