C ++ UDP套接字端口多路复用
-
28-09-2019 - |
题
如何在C ++中创建客户端UDP套接字,以便它可以在另一个应用程序正在收听的端口上侦听?换句话说,如何在C ++中应用端口多路复用?
解决方案
我只想在一个端口上听
您可以用嗅探器做到这一点。只需忽略来自不同端口的数据包即可。
我可能需要阻止它发送一些特定的数据包,因为我的程序将发送它而不是原始应用程序
好吧,我建议您丢弃嗅探器,并使用 MITM 技术。
您需要依靠预先的防火墙规则 转移 数据包代理“应用。假设UDP,Linux,Iptables和the”代理“在同一主机上奔跑,这就是什么”代理“实际上需要做:
1. 将防火墙规则添加到 转移 数据包(如果愿意,请手动执行):
iptables -t nat -A PREROUTING -i <iface> -p <proto> --dport <dport>
-j REDIRECT --to-port <newport>
2. 绑定并聆听 <newport>
.
3. 中继两个端点(客户端和原始目的地)之间的所有流量。如果您正在运行”代理“在另一个主机上,使用 getsockopt 和 SO_ORIGINAL_DST
检索原始目标地址。
听起来可能很棘手,但是...是的,这是因为这有点棘手:-)如果我的假设有所不同,请咨询您的防火墙文档。
其他提示
这只是小包嗅吗 tcpdump
或者 snoop
, ,打开一个原始插座,并根据需要从电线中拉出所有东西。您可能想使用 libpcap 使事情变得更轻松。
没有管理员或超级用户特权,您将需要目标应用程序来打开端口 SO_REUSEADDR
和 SO_REUSEPORT
适合平台。您只能收到广播和多播数据包,单播数据包被输送到第一个开放插座。
不隶属于 StackOverflow