web-dev-qa-db-ja.com

Pythonでのブロードキャストパケットの受信

サブネットでブロードキャストされるudpパケットを送信する次のコードがあります。

from socket import *
s=socket(AF_INET, SOCK_DGRAM)
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
s.sendto('this is testing',('255.255.255.255',12345))

次のコードは、ブロードキャストパケットを受信するためのものです。

from socket import *
s=socket(AF_INET, SOCK_DGRAM)
s.bind(('172.30.102.141',12345))
m=s.recvfrom(1024)
print m[0]

問題は、ブロードキャストパケットを受信しないことです。ただし、そのポートに送信された通常のudpパケットを正常に受信しています。

私のマシンは明らかにnetcatを使用してテストしたブロードキャストパケットを受信して​​いました。

$ netcat -lu -p 12345                                             
this is testing^C

それで、問題は正確にどこにありますか?

18
nitish712

デフォルトのアドレスにバインドしてみてください:

s.bind(('',12345))
24
John Zwinck

受け入れられた答えに概説されている解決策が問題を解決していると思いますが、正確な方法ではありません。通常のインターフェイスIPではなく、メッセージの送信に使用されるブロードキャストIPを使用する必要があります。たとえば、ifconfigが次の場合:





13
Abraham Philip
s=socket(AF_INET, SOCK_DGRAM)
s.bind(('',1234))
while(1):
    m=s.recvfrom(4096)
    print 'len(m)='+str(len(m))
    print 'len(m[0])='+str(len(m[0]))    
    print m[0]

    print 'len(m[1])='+str(len(m[1]))    
    print m[1]  
2
MinhNV