当我有两个以太网卡时,如何发送UDP广播?

时间:2013-03-14 23:23:19

标签: python udp

我有两个以太网卡,我想在本地网络(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()

我如何指定发送邮件的女巫子网?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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))