سؤال

أرغب في البحث عن عنوان MAC محدد على شبكتي، كل ذلك من داخل برنامج Python النصي.لدي بالفعل خريطة لجميع عناوين IP النشطة في الشبكة ولكن لا يمكنني معرفة كيفية الحصول على عنوان MAC.أيه أفكار؟

هل كانت مفيدة؟

المحلول

انت تحتاج ARP.لا تتضمن مكتبة بايثون القياسية أي تعليمات برمجية لذلك، لذا تحتاج إما إلى استدعاء برنامج خارجي (قد يحتوي نظام التشغيل لديك على أداة مساعدة 'arp') أو تحتاج إلى إنشاء الحزم بنفسك (ربما باستخدام أداة مثل سكيبي.

نصائح أخرى

هذا المقال, يبدو أن "إرسال إطارات Ethernet مصنوعة يدويًا بلغة Python (ARP على سبيل المثال)" هو بالضبط ما تبحث عنه.

لا أعتقد أن هناك طريقة مدمجة للحصول عليها من بايثون نفسها.

سؤالي هو، كيف يمكنك الحصول على معلومات IP من شبكتك؟

للحصول عليه من جهازك المحلي، يمكنك تحليل ifconfig (unix) أو ipconfig (windows) دون صعوبة كبيرة.

إذا كنت تريد حلاً خالصًا لـ Python، فيمكنك إلقاء نظرة عليه سكيبي لصياغة الحزم (تحتاج إلى إرسال طلب ARP وفحص الردود).أو إذا كنت لا تمانع في استدعاء برنامج خارجي، يمكنك استخدامه arping (في أنظمة Un*x، لا أعرف ما يعادلها في Windows).

يبدو أنه لا توجد طريقة أصلية للقيام بذلك باستخدام بايثون.سيكون أفضل رهان لك هو تحليل مخرجات "ipconfig /all" على نظام التشغيل Windows، أو "ifconfig" على نظام Linux.فكر في استخدام os.popen() مع بعض التعبيرات العادية.

يعتمد على النظام الأساسي الخاص بك.إذا كنت تستخدم *nix، فيمكنك استخدام الأمر "arp" للبحث عن عنوان mac لعنوان IP محدد (بافتراض IPv4).إذا لم ينجح ذلك، فيمكنك اختبار اتصال العنوان ثم البحث، أو إذا كان لديك حق الوصول إلى الشبكة الأولية (باستخدام BPF أو أي آلية أخرى)، فيمكنك إرسال حزم ARP الخاصة بك (ولكن ربما يكون هذا مبالغة).

قد ترغب في تحليل مخرجات 'arp'، لكن ذاكرة التخزين المؤقت لـ kernel ARP ستحتوي فقط على عنوان (عناوين) IP تلك إذا تواصل هؤلاء المضيفون مع المضيف حيث يتم تشغيل البرنامج النصي Python.

يمكن استخدام ifconfig لعرض عناوين MAC للواجهات المحلية، وليس تلك الموجودة على الشبكة المحلية.

يصف Mark Pilgrim كيفية القيام بذلك على نظام التشغيل Windows للجهاز الحالي باستخدام وحدة Netbios هنا.يمكنك الحصول على وحدة Netbios كجزء من حزمة Win32 المتوفرة على python.org.لسوء الحظ في الوقت الحالي لا أستطيع العثور على المستندات في الوحدة.

نظرًا لأن لغة python لم يكن المقصود منها التعامل مع المشكلات الخاصة بنظام التشغيل (من المفترض أن يتم تفسيرها وعبر النظام الأساسي)، فسوف أقوم بتنفيذ أمر خارجي للقيام بذلك:

في يونكس الأمر هو ifconfig

إذا قمت بتنفيذه كأنبوب فستحصل على النتيجة المرجوة:

import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top