【发布时间】:2019-09-01 08:26:25
【问题描述】:
如何将 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 上的多宿主计算机上运行。
网络 A 上 IP 为 192.168.10.10 的客户端发送 M-SEARCH 消息:
- 源 IP/端口:192.168.10.10 端口 40000
- 目标 IP/端口:239.255.255.250 端口 1900
我在 192.168.10.2 上的“路由器应用程序”接收到数据包并想在网络 B 上重新广播它。但是我在套接字 API 中找不到任何允许我设置源 IP 地址的方法。只选择源接口。
因此,重新广播的数据包现在看起来像这样:
- 源 IP/端口:192.168.11.2 端口 xxxxx
- 目标 IP/端口:239.255.255.250 端口 1900
现在接收服务无法单播回客户端,因为原始 IP 和端口已丢失。
【问题讨论】: