[英]C++ UDP Socket port multiplexing
如何在C ++中创建客户端UDP套接字,以便它可以在另一个应用程序正在监听的端口上进行监听? 换句话说,如何在C ++中应用端口多路复用?
我只想在一个端口上收听
您可以使用嗅探器来做到这一点。 只是忽略来自不同端口的数据包。
我可能需要阻止它发出某些特定的数据包,因为我的程序将发送它而不是原始应用程序
好的,在这里我建议您丢弃嗅探器,并使用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个端点(客户端和原始目的地)之间中继所有流量。 如果要在其他主机上运行“ 代理 ”, SO_ORIGINAL_DST
getsockopt与SO_ORIGINAL_DST
一起使用以检索原始目标地址。
这听起来可能很棘手,但是...是的,这是因为它有点棘手:-)如果我的假设有所不同,请查阅防火墙文档。
这只是像tcpdump
或snoop
这样的数据包嗅探,打开一个原始套接字,并根据需要从电线和过滤器中拉出所有东西。 您可能希望使用libpcap使事情变得容易一些。
没有管理员或超级用户特权,您将需要目标应用程序使用适合平台的SO_REUSEADDR
和SO_REUSEPORT
打开端口。 需要注意的是,您只能接收广播和多播数据包,单播数据包将传递到第一个打开的套接字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.