2012-10-19 25 views
5

मेरे पास उबंटू आभासी मशीन यूडीपी प्रसारण पैकेट के लिए सुन रही है जो मेजबान मशीन द्वारा उत्पन्न होती है। अगर मैं अपने नेटवर्क में से किसी एक से जुड़ता हूं तो पाइथन की सॉकेट का उपयोग करके eth1 या lo (स्थानीय लूपबैक) इंटरफेस करता है। बाइंड विधि मुझे कोई पैकेट नहीं मिलता है। यदि, हालांकि, मैं '' (सभी इंटरफेस के लिए प्रतीक) का उपयोग कर बांधता हूं तो सब कुछ ठीक है। मैं उम्मीद करता हूं कि केवल eth1 के पते से जुड़ना संभव था, लेकिन ऐसा लगता है कि यह मामला नहीं है। क्या कोई समझा सकता है कि '' की आवश्यकता क्यों है? क्या कुछ मज़ेदार चल रहा है क्योंकि मैं वर्चुअल मशीन का उपयोग कर रहा हूं? मैं एक ब्रिज-नेटवर्क सेटअप का उपयोग कर रहा हूं ताकि वर्चुअल मशीन मेरे लैन पर एक और मशीन की तरह दिखती हो। कोड यह रहा:यूडीपी प्रसारण प्राप्त करना [वर्चुअलबॉक्स, उबंटू, पायथन]

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 

sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 

# using the '' address works 
sock.bind(('', UDP_PORT)) 
# using the address of eth1 doesn't 
#sock.bind(('192.168.2.123', UDP_PORT)) 
# and neither does using the local loopback 
#sock.bind(('127.0.0.1', UDP_PORT)) 

while True: 
    data, addr = sock.recv(2048) 
    print data 
+0

'127.0.0.1' के बारे में क्या? – dav1d

+0

127.0.0.1 या तो काम नहीं करता है। किसी कारण से इसे "पता होना चाहिए जो मुझे समझ में नहीं आता है। मैं थोड़ा सा स्पष्ट होने के लिए अपना कोड बदल दूंगा। – user975326

उत्तर

0

नेटवर्क प्रोग्रामिंग में खाली पता स्ट्रिंग सभी कॉन्फ़िगर इंटरफेस दर्शाती है। यदि आईपी पता निर्दिष्ट किया गया है, तो सॉकेट केवल निर्दिष्ट आईपी पते के साथ इंटरफेस पर सुनेंगे।

0

भी विकल्प '< प्रसारण >' (http://docs.python.org/2/library/socket.html के अनुसार) एक प्रसारण पता करने के लिए बाध्य करने के लिए नहीं है। इसलिए मैं सुझाव दूंगा कि आप अपने इंटरफ़ेस के प्रसारण पते का उपयोग करने का प्रयास करें, जैसे कि 192.168.2.255 (मान लें कि आपका नेटवर्क 1 9 2.168.2.0/24 है)।