如何将UDP组播包的源IP地址设置为非接口IP?
我试图编写一个小路由器,选择性地将UDP SSDP包从一个网络路由到另一个网络。我们的计划是在python中这样做,尽管我在这方面很灵活。
路由SSDP通知消息似乎相当容易:我在一个接口上接收它们,并决定在哪个接口上重新广播它们。但是,M-搜索消息的协议要求将源IP设置为消息的原始源,因为任何选择响应的服务都将以单播消息响应源IP和端口。
示例(严重简化):
网络A上具有IP 192.168.10.10的客户端发送M-搜索消息:
我在192.168.10.2上的“路由器应用程序”接收数据包,并希望在网络B上重新广播它。然而,我在socket API中找不到任何允许我设置源IP地址的方法。只能选择源接口。
因此,重新广播的数据包现在如下所示:
由于原始IP和端口丢失,接收服务现在无法返回到客户端。
发布于 2019-09-02 06:41:12
如何将UDP组播包的源IP地址设置为非接口IP?
我所知道的唯一方法是使用原始套接字并手动构造IP报头。请注意,在大多数平台上,原始套接字的使用通常仅限于管理用户。
但是,在套接字API中找不到允许我设置源IP地址的任何方法。
因为根本就没有。
由于原始IP和端口丢失,接收服务现在无法返回到客户端。
当路由器接收到M-搜索请求时,当它接收到单播回复,然后将其转发给原始请求者时,难道不能让路由器记住原始源吗?这就是大多数路由器通常的工作方式。
https://stackoverflow.com/questions/57744381
复制相似问题