2024-09-30 01:22:11 发布
网友
我正在尝试通过Windows用python向本地网段上的所有节点发送ipv6udp数据包。在
我的计算机中有几个网络接口,我想知道如何指定发送数据包的网络接口。在
我尝试将数据包发送到多播地址ff02::1,使用插座.sendto(无绑定),但数据包在错误的网络接口中发送。在
你知道如何指定网络适配器吗?(我读过BINDTODEVICE,但它在windows上不起作用,有些方法使用bind来广播IP地址类,但只适用于IPv4)。在
谢谢!在
根据this问题的答案,使用ff12::1的多播有时比使用ff02::1的多播效果更好。 我试了一下,它成功了——数据包是通过以太网网络接口(如我所愿)发送的,而不是像以前那样通过WiFi发送的。在
然而,我不知道它为什么会起作用,而且我在ipv6rfc或互联网上的任何地方都找不到它的任何参考。 欢迎解释:)
我不太喜欢以前的解决方案,所以我一直在寻找其他解决方案。在
对我有用的第一个选项是将发送方套接字绑定到特定的网络接口地址。使用netifaces模块可以找到网络接口地址,我使用了this有用的答案来指定以太网地址。在
netifaces
另一个可能有用的选项是IPV6\u MULTICAST_IF选项-
#x is the relevant interface index sock.setsockopt(socket.IPPROTO_IPV6,socket.IPV6_MULTICAST_IF,x)
在Windows,Python2.7中,应该添加一行
在此代码之前(因为相关枚举未定义好)。在
其他信息可以在here(Windows)或here(Linux)中找到。在
虽然它看起来是一个更简单的解决方案,但我并没有完全成功地使它工作,也不确定什么是正确的方法来找到正确的接口索引(在Windows上,Linux有几个选项)。在
根据this问题的答案,使用ff12::1的多播有时比使用ff02::1的多播效果更好。 我试了一下,它成功了——数据包是通过以太网网络接口(如我所愿)发送的,而不是像以前那样通过WiFi发送的。在
然而,我不知道它为什么会起作用,而且我在ipv6rfc或互联网上的任何地方都找不到它的任何参考。 欢迎解释:)
我不太喜欢以前的解决方案,所以我一直在寻找其他解决方案。在
对我有用的第一个选项是将发送方套接字绑定到特定的网络接口地址。使用
netifaces
模块可以找到网络接口地址,我使用了this有用的答案来指定以太网地址。在另一个可能有用的选项是IPV6\u MULTICAST_IF选项-
在Windows,Python2.7中,应该添加一行
^{pr2}$在此代码之前(因为相关枚举未定义好)。在
其他信息可以在here(Windows)或here(Linux)中找到。在
虽然它看起来是一个更简单的解决方案,但我并没有完全成功地使它工作,也不确定什么是正确的方法来找到正确的接口索引(在Windows上,Linux有几个选项)。在
相关问题 更多 >
编程相关推荐