كيف يمكنك الحصول على عنوان إيثرنت باستخدام جافا؟

StackOverflow https://stackoverflow.com/questions/33960

  •  09-06-2019
  •  | 
  •  

سؤال

أرغب في استرداد عنوان إيثرنت الخاص بواجهة الشبكة المستخدمة للوصول إلى موقع ويب معين.

كيف يمكن القيام بذلك في جافا؟

حل لاحظ أن الحل المقبول لـ getHardwareAddress متاح فقط في Java 6.لا يبدو أن هناك حلاً لـ Java 5 بخلاف تنفيذ i(f|p)confing.

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

المحلول

java.net.NetworkInterface.getHardwareAddress (تمت إضافة الطريقة في Java 6)

يجب أن يتم استدعاؤه على الجهاز الذي تهتم به - لا يتم نقل MAC عبر حدود الشبكة (أي.الشبكة المحلية والشبكة الواسعة).إذا كنت تريد الاستفادة منه على خادم موقع ويب لاستجواب العملاء، فسيتعين عليك تشغيل تطبيق صغير من شأنه أن يرسل لك تقريرًا بالنتيجة.

بالنسبة لـ Java 5 والإصدارات الأقدم، وجدت رمزًا تحليل مخرجات أدوات سطر الأوامر على الأنظمة المختلفة.

نصائح أخرى

يمكنك الحصول على العنوان الذي يتصل بـ ServerSocket الخاص بك باستخدام http://java.sun.com/javase/6/docs/api/Java/net/NetworkInterface.html#getInetAddresses()

ومع ذلك، إذا كان العميل الخاص بك يتصل عبر NAT، فستحصل على عنوان جهاز التوجيه وليس عنوان Ethernet.إذا كان موجودًا على شبكتك المحلية (عبر لوحة وصل/مفتاح، ولا يوجد جهاز توجيه مزود بـ NAT)، فسيعمل على النحو المنشود.

في الواقع، بخلاف الإجابات الصحيحة الأخرى (JDK 6؛exec 'ifconfig')، توجد مكتبات قائمة على JNI. مولد جافا Uuid (JUG) 2.0 لديه رمز لبعض المنصات.يعمل هذا على JDK 1.2 وما فوق على الأقل (وربما 1.1 حتى)

يمكنك استخدام جي اكس نت: https://github.com/ardikars/Jxnet (يتطلب libpcap/winpcap)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top