【问题标题】:Multihomed UDP Python servers listening on 0.0.0.0监听 0.0.0.0 的多宿主 UDP Python 服务器
【发布时间】:2019-08-08 20:14:37
【问题描述】:

由于 python 中不支持IP_PKTINFO(用于 IPv4),生产中是否没有多宿主 UDP python 服务器?

如果有(我希望会有),他们如何处理将响应 UDP 数据包发送到他们收到请求的接口的问题!


编辑澄清

假设我有一个具有多个接口的 UDP 服务器(这里考虑 2 个),每个接口的 IP 分别为 172.217.163.68 和 172.217.163.69。服务器在 0.0.0.0 上有套接字绑定调用。现在如果一个请求包从 172.217.163.68 来,服务器处理它,形成一个响应包,然后在什么接口上发送?它无法知道请求数据包是从哪个接口到达的,因此它无法填写发送接口IP。这是因为python中不支持IP_PKTINFO。

另外需要注意的是,这里不能使用默认路由。如果使用默认路由,那么从客户端的角度来看,它向 172.217.163.68 发送请求,却从 172.217.163.69 得到响应,这显然是错误的。

【问题讨论】:

    标签: python server network-programming udp


    【解决方案1】:

    UDP 服务器使用recvfromsendto 获取源IP 地址并发回响应:

    接收:message, address = socket.recvfrom(1024)

    发送:socket.sendto(message, address)

    您可以在 this question 中看到 Python 中的示例 UDP 服务器

    【讨论】:

    • sendtorecvfrom 用于 w.r.t。给客户。在服务器端,我对“sendfrom”之类的东西更感兴趣,这样我就可以控制应该从哪个接口发送数据包。编辑了问题以进行澄清。
    猜你喜欢
    • 2020-06-06
    • 1970-01-01
    • 2021-11-05
    • 2016-11-06
    • 2011-07-07
    • 2013-07-25
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多