如何在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. 中继两个端点(客户端和原始目的地)之间的所有流量。如果您正在运行”代理“在另一个主机上,使用 getsockoptSO_ORIGINAL_DST 检索原始目标地址。

听起来可能很棘手,但是...是的,这是因为这有点棘手:-)如果我的假设有所不同,请咨询您的防火墙文档。

其他提示

这只是小包嗅吗 tcpdump 或者 snoop, ,打开一个原始插座,并根据需要从电线中拉出所有东西。您可能想使用 libpcap 使事情变得更轻松。

没有管理员或超级用户特权,您将需要目标应用程序来打开端口 SO_REUSEADDRSO_REUSEPORT 适合平台。您只能收到广播和多播数据包,单播数据包被输送到第一个开放插座。

这是 不是 多路复用 - 该术语保留在同一过程中的多个渠道上处理I/O select(2)poll(2) 最有用。

你要的是 多播. 这里 是基本示例。

请注意,IP保留了一系列特殊的地址(又名组)进行多播。这些被映射到特殊的以太网地址。听众必须 加入 多播组,虽然发件人不必这样做,但它像往常一样发送。

希望这可以帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top