tcmpdump विशिष्ट मल्टीकास्ट ट्रैफ़िक को विशिष्ट समूह और eth2 पर बंदरगाह पर देख सकता है, लेकिन मेरा पायथन प्रोग्राम नहीं कर सकता है। अजगर कार्यक्रम, Ubuntu 12.04 पर चल रहा है:विशिष्ट इंटरफ़ेस पर मल्टीकास्ट डेटा प्राप्त करना
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Multicast port is 52122
sock.bind(('', 52122))
# Interface eth2 IP is 1.2.3.4, multicast group is 6.7.8.9
mreq = socket.inet_aton('6.7.8.9')+socket.inet_aton('1.2.3.4')
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while True:
print '\nwaiting to receive message'
data, address = sock.recvfrom(1024)
print data
जब मैं अन्य प्रोग्राम का उपयोग करने के लिए एक eth2 बहुस्त्र्पीय पैकेट भेजने के लिए, यह काम करता है और पैकेट प्रिंट करता है। लेकिन यह सभी मौजूदा मल्टीकास्ट यातायात को देखने में विफल रहता है। अगर मैं एक ही बंदरगाह और उपरोक्त कार्यक्रम के रूप में समूह पर eth2 पर tcpdump चलाएँ:
sudo tcpdump -i eth2 host 6.7.8.9 and port 52122
इसे देखता है दोनों पैकेट मैं किसी अन्य प्रोग्राम और सभी मौजूदा बहुस्त्र्पीय यातायात से भेजें। यह आउटपुट दिखता है ...
# Packet sent from my other program
09:52:51.952714 IP 1.2.3.4.57940 > 6.7.8.9.52122: UDP, length 19
# Packet send from the outside world
09:52:52.143339 IP 9.9.9.9.39295 > 6.7.8.9.52122: UDP, length 62
मेरा प्रोग्राम बाहरी दुनिया से पैकेट क्यों नहीं देख सकता है? इसे ठीक करने के लिए मैं इसे कैसे संशोधित कर सकता हूं (या कुछ और)?
संपादित करें:
मैंने कहा जाना चाहिए था, इंटरफ़ेस इस पर नहीं जा रहा eth2
लेकिन eth2.200
एक VLAN है। (स्थानीय आईपी और टीसीपीडम्प आदेश सभी eth2.200
के साथ चलाए जाते हैं, मैंने अभी इस विषय में इसे आसान बनाने के लिए बदल दिया है।) this answer पर आधारित यह समस्या हो सकती है?
# 2 संपादित करें:
netstat -ng
जब कार्यक्रम से पता चलता है चल रहा है eth2.200
224.0.0.1 और 6.7.8.9` की सदस्यता ली।
tshark -i eth2.200 igmp
कार्यक्रम शुरू होने पर तीन बार 1.2.3.4 -> 6.7.8.9 IGMP 46 V2 Membership Report/Join group 6.7.8.9
दिखाता है। जब प्रोग्राम प्रक्रिया मारे जाती है, तो यह 1.2.3.4 -> 224.0.0.2 IGMP 46 V2 Leave group 6.7.8.9
दिखाती है। एक कम 1.2.3.1 -> 224.0.0.1 IGMP 60 V2 Membership Query, general
भी है, जहां 1.2.3.1 1.2.3.4 का गेटवे है।
सुनिश्चित नहीं हैं कि अगर यह मदद मिलेगी, लेकिन अनुमार्गण तालिका की तरह दिखता है:
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 1.2.5.6 0.0.0.0 UG 0 0 0 eth1
1.2.3.0 0.0.0.0 255.255.255.240 U 0 0 0 eth2.200
धन्यवाद!
जब आप अपना प्रोग्राम चलाते हैं तो 'netstat -ng' क्या कहता है? –
क्या आपको 'mreq' पर' struct.pack ("= 4sl", ...) की आवश्यकता नहीं है? रेफरी: [UdpCommunication] (http://wiki.python.org/moin/UdpCommunication)। –
@ निकोलई एनफेटिसोव: चलते समय, eth2 के तहत, यह सूचीबद्ध करता है: 'eth2 1 23.13.16.41', eth_ 2 6.7.8.9', eth_ 1 224.0.0.1'। 23.13.16.41 एक और समूह है जिसे मैंने कुछ समय पहले सदस्यता लेने की कोशिश की थी। – Albeit