发送UDP多播消息时设置源地址

2024-06-16 11:06:46 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将UDP多播包的源IP地址设置为接口IP以外的其他地址

我试图写一个小路由器,有选择地路由UDP-SSDP包从一个网络到另一个。我们的计划是用python来实现,尽管我在这方面很灵活

路由SSDP NOTIFY消息似乎相当容易:我在一个接口上接收它们,并决定在哪个接口上重新广播它们。但是,M-SEARCH消息的协议要求将源IP设置为消息的原始源,因为选择响应的任何服务都将以单播消息对源IP和端口进行响应

示例(高度简化):

  • 网络A:192.168.10.0/24
  • 网络B:192.168.11.0/24
  • 我的路由器应用程序运行在192.168.10.2和192.168.11.2的多主计算机上

IP为192.168.10.10的网络上的客户端发送M-SEARCH消息:

  • Src IP/端口:192.168.10.10端口40000
  • Dst IP/端口:239.255.255.250端口1900

我在192.168.10.2上的“路由器应用程序”接收到数据包并想在网络B上重播它。但是,我在socketapi中找不到任何允许我设置源IP地址的方法。只选择源接口

因此,重播的数据包现在如下所示:

  • Src IP/端口:192.168.11.2端口xxxxx
  • Dst IP/端口:239.255.255.250端口1900

现在接收服务无法单播回客户机,因为原始IP和端口丢失


Tags: 端口ip网络src消息路由search地址
1条回答
网友
1楼 · 发布于 2024-06-16 11:06:46

How to set the source IP address for UDP multicast packages to something else than the interface IP?

我知道的唯一方法是使用原始套接字并手动构造IP头。注意,在大多数平台上,原始套接字的使用通常仅限于管理员用户

However I cannot find any method in the socket API that allows me to set the source IP address.

因为没有

And now the receiving service is unable to unicast back to the client as the original IP and port are lost.

难道你不能让你的路由器在收到M-SEARCH请求时记住原始的源代码,当它收到单播回复时再转发给原始的请求者吗?这就是大多数路由器通常的工作方式

相关问题 更多 >