如何将UDP多播包的源IP地址设置为接口IP以外的其他地址
我试图写一个小路由器,有选择地路由UDP-SSDP包从一个网络到另一个。我们的计划是用python来实现,尽管我在这方面很灵活
路由SSDP NOTIFY消息似乎相当容易:我在一个接口上接收它们,并决定在哪个接口上重新广播它们。但是,M-SEARCH消息的协议要求将源IP设置为消息的原始源,因为选择响应的任何服务都将以单播消息对源IP和端口进行响应
示例(高度简化):
IP为192.168.10.10的网络上的客户端发送M-SEARCH消息:
我在192.168.10.2上的“路由器应用程序”接收到数据包并想在网络B上重播它。但是,我在socketapi中找不到任何允许我设置源IP地址的方法。只选择源接口
因此,重播的数据包现在如下所示:
现在接收服务无法单播回客户机,因为原始IP和端口丢失
我知道的唯一方法是使用原始套接字并手动构造IP头。注意,在大多数平台上,原始套接字的使用通常仅限于管理员用户
因为没有
难道你不能让你的路由器在收到M-SEARCH请求时记住原始的源代码,当它收到单播回复时再转发给原始的请求者吗?这就是大多数路由器通常的工作方式
相关问题 更多 >
编程相关推荐