繁体   English   中英

C ++ UDP套接字端口多路复用

[英]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 getsockoptSO_ORIGINAL_DST一起使用以检索原始目标地址。

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

这只是像tcpdumpsnoop这样的数据包嗅探,打开一个原始套接字,并根据需要从电线和过滤器中拉出所有东西。 您可能希望使用libpcap使事情变得容易一些。

没有管理员或超级用户特权,您将需要目标应用程序使用适合平台的SO_REUSEADDRSO_REUSEPORT打开端口。 需要注意的是,您只能接收广播和多播数据包,单播数据包将传递到第一个打开的套接字。

不是多路复用-该术语保留用于在同一过程中处理多个通道上的I / O,而select(2)poll(2)类的东西最有用。

您要的是多播 是基本示例。

请注意,IP为多播保留了一个特殊的地址范围(即组)。 这些被映射到特殊的以太网地址。 侦听器必须加入多播组,而发送者不必加入 ,而只是照常发送。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM