3

我有两个以太网卡,我想在本地网络(192.168.0.255)上发送 UDP 广播消息,但是 UDP 消息只发送第一个以太网卡。

ip ="255.255.255.255"
UDPSocket = socket.socket( socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP )
UDPSocket.setsockopt( socket.SOL_SOCKET, socket.SO_BROADCAST, True )
UDPSocket.settimeout( timeout )
UDPSocket.sendto( msg.xmlmsg, ( ip, UDPport ) )

UDPSocket.close()

如何指定要发送消息的女巫子网?

4

2 回答 2

3

您必须bind将套接字连接到本地地址。

对于非广播 UDP 套接字,您通常绑定到任意地址 (0.0.0.0)。您还可以选择特定端口或让系统为您选择一个(端口 0)。如果您没有明确绑定套接字,它将自动绑定到第一个 0.0.0.0:0 send

总是建议做广播明确地做绑定,并指定你自己的所选接口的本地地址。如果您不需要特定端口,则可以使用端口 0。

于 2013-03-14T23:37:15.293 回答
0

接受的答案对我不起作用,试图在原始套接字上发送 ICMP ECHO 请求。我不得不这样做:

target = '8.8.8.8'
packet = bytearray(...)
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
sock.setsockopt(socket.SOL_SOCKET, 25, 'eth0') # or whatever the name of the interface is
                                               # 25 = SO_BINDTODEVICE
                                               # Some Python installations will have the constant IN.SO_BINDTODEVICE which you can use here, YMMV
sock.sendto(packet, (target, 1))
于 2018-11-12T12:02:25.337 回答