2008-09-17 29 views
8

का उपयोग कर मैक-एड्रेस के साथ मेजबान के लिए खोजें, मैं अपने नेटवर्क पर दिए गए मैक पते की खोज करना चाहता हूं, सब कुछ एक पायथन लिपि के भीतर से। मेरे पास पहले से ही नेटवर्क में सभी सक्रिय आईपी पते का नक्शा है लेकिन मैं यह नहीं समझ सकता कि मैक पते को कैसे प्राप्त किया जाए। कोई विचार?पाइथन

उत्तर

11

आपको ARP की आवश्यकता है। पायथन की मानक लाइब्रेरी में इसके लिए कोई कोड शामिल नहीं है, इसलिए आपको या तो बाहरी प्रोग्राम को कॉल करने की आवश्यकता है (आपके ओएस में 'arp' उपयोगिता हो सकती है) या आपको पैकेट्स बनाने की आवश्यकता है (संभवतः Scapy जैसे टूल के साथ।

1

मुझे नहीं लगता कि इसे पायथन से प्राप्त करने के लिए एक अंतर्निहित तरीका है।

मेरा सवाल है, आप अपने नेटवर्क से आईपी जानकारी कैसे प्राप्त कर रहे हैं?

इसे अपनी स्थानीय मशीन से प्राप्त करने के लिए आप ifconfig (यूनिक्स) या ipconfig (विंडोज़) को थोड़ा कठिनाई के साथ पार्स कर सकते हैं।

0

आपके प्लेटफ़ॉर्म पर निर्भर करता है। यदि आप * निक्स का उपयोग कर रहे हैं, तो आप किसी दिए गए आईपी (आईपीवी 4 मानते हुए) पते के लिए मैक पता देखने के लिए 'arp' कमांड का उपयोग कर सकते हैं। अगर यह काम नहीं करता है, तो आप पिंग कर सकते हैं पता और फिर देखो, या यदि आपके पास कच्चे नेटवर्क (बीपीएफ या किसी अन्य तंत्र का उपयोग करके) तक पहुंच है, तो आप अपने स्वयं के एआरपी पैकेट भेज सकते हैं (लेकिन शायद यह अधिक है)।

1

यदि आप शुद्ध पायथन समाधान चाहते हैं, आप क्राफ्ट पैकेट के लिए Scapy पर एक नज़र डाल सकते हैं (आपको एआरपी अनुरोध भेजने और उत्तरों का निरीक्षण करने की आवश्यकता है) या यदि आपको बाहरी प्रोग्राम का आविष्कार करने में कोई फर्क नहीं पड़ता है, तो आप arping (अन * एक्स सिस्टम पर, मुझे विंडोज़ समकक्ष के बारे में नहीं पता) का उपयोग कर सकते हैं।

1

ऐसा लगता है कि पायथन के साथ ऐसा करने का मूल तरीका नहीं है। आपकी सबसे अच्छी शर्त विंडोज पर "ipconfig/all" के आउटपुट, या लिनक्स पर "ifconfig" के उत्पादन को पार्स करना होगा। कुछ regexps के साथ os.popen() का उपयोग करने पर विचार करें।

0

आप 'arp' के आउटपुट को पार्स करना चाहते हैं, लेकिन कर्नेल एआरपी कैश में केवल उन आईपी पते (एसएस) होंगे यदि उन मेजबानों ने मेजबान के साथ संवाद किया है जहां पाइथन स्क्रिप्ट चल रहा है।

ifconfig का उपयोग स्थानीय इंटरफेस के मैक पते को प्रदर्शित करने के लिए किया जा सकता है, लेकिन लैन पर नहीं।

0

मार्क पिलग्रीम वर्णन करता है कि विंडोज़ पर नेटबियोस मॉड्यूल here के साथ वर्तमान मशीन के लिए इसे कैसे करें। आप netbios मॉड्यूल को python.org पर उपलब्ध Win32 पैकेज के हिस्से के रूप में प्राप्त कर सकते हैं। दुर्भाग्य से इस समय मैं मॉड्यूल पर दस्तावेज़ नहीं ढूंढ सकता।

-1

के रूप में अजगर (यह व्याख्या की जा करने के लिए और पार मंच चाहिए था) ओएस विशिष्ट मुद्दों से निपटने के लिए नहीं था, मैं एक बाहरी आदेश पर अमल होगा ऐसा करने के लिए:

यूनिक्स में

आदेश ifconfig

है

यदि आप एक पाइप आप इच्छित परिणाम प्राप्त के रूप में यह निष्पादित करें:

import os 
myPipe = os.popen2("/sbin/ifconfig","a") 
print(myPipe[1].read()) 
+0

पायथन में ओएस-विशिष्ट मॉड्यूल हैं, इसलिए मुझे लगता है कि आप उत्तर भ्रामक हैं। इसे संभालने का पाइथोनिक तरीका एक ओएस स्वतंत्र इंटरफ़ेस रखने वाला मॉड्यूल होगा जिसे ओएस विशिष्ट प्लगइन द्वारा उप-वर्गीकृत किया जा सकता है। – Walter

2

This article, "(उदाहरण के लिए ARP) पायथन में भेजें हाथ से तैयार किए ईथरनेट फ्रेम्स", होना करने के लिए आप के लिए वास्तव में क्या देख रहे हैं लगता है।