كيف يمكنك معرفة بطاقة NIC المتصلة بالإنترنت؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

خذ بعين الاعتبار الإعداد التالي:جهاز كمبيوتر يعمل بنظام Windows مزود بواجهة LAN وواجهة WiFi (المعيار لأي كمبيوتر محمول جديد).قد تكون كل واجهة من الواجهات متصلة أو منفصلة عن الشبكة.أحتاج إلى طريقة لتحديد أي من المحولات هو المتصل بالإنترنت - على وجه التحديد، في حالة اتصالهما بشبكات مختلفة، أحدهما متصل بالإنترنت والآخر بدون اتصال.

الحل الحالي الخاص بي يتضمن استخدام IPHelper's "GetBestInterface" وتزويدها بعنوان IP "0.0.0.0".

هل لديك أي حلول أخرى قد تقترحها لهذه المشكلة؟

بعد بعض الإجابات ، اسمحوا لي أن أوضح:

  • أحتاج إلى هذا لأن لدي منتجًا عليه اختيار المحول الذي سأرتبط به.ليس لدي أي طريقة للتحكم في إعداد الشبكة أو المضيف حيث سيتم تشغيل المنتج ولذلك أحتاج إلى حل قوي قدر الإمكان، مع أقل عدد ممكن من الافتراضات.
  • أحتاج إلى القيام بذلك في التعليمات البرمجية، لأن هذا جزء من المنتج.

@ كريس أتشرتش:وهذا يجعلني أعتمد على تشغيل موقع google.com (لا يمثل هذا مشكلة في العادة) وعلى أي جدار حماية شخصي قد يتم تثبيته للسماح بإجراء اختبار الاتصال.

@حتى:وكما قال ستيف مون، فإن الاعتماد على عنوان المحول يعد أمرًا محفوفًا بالمخاطر لأنك تضع الكثير من الافتراضات حول إعداد الشبكة الداخلية.

@ ستيف مون:يبدو النظر إلى جدول التوجيه فكرة جيدة، ولكن بدلاً من تطبيق منطق التوجيه بنفسي، أحاول استخدام "GetBestInterface" كما هو موضح أعلاه.أعتقد أن ما يجب أن تفعله هو بالضبط ما حددته في إجابتك، لكنني لست متأكدًا حقًا.السبب الذي يجعلني متردداً في تنفيذ "منطق التوجيه" الخاص بي هو أن هناك فرصة أفضل لأن أخطئ في الأمر مما لو كنت أستخدم مكتبة/واجهة برمجة تطبيقات مكتوبة ومختبرة من قبل المزيد من الأشخاص "المتشددين" في الشبكة.

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

المحلول

من الناحية الفنية، لا يوجد "متصل بالإنترنت".السؤال الحقيقي هو: ما هي الواجهة التي يمكن توجيهها إلى العنوان المطلوب؟أنت الآن تستعلم عن "المسار الافتراضي" - وهو المسار الذي ينطبق في حالة عدم وجود طريق محدد إلى الوجهة.لكنك تتجاهل أي طرق محددة.

لحسن الحظ، بالنسبة لـ 99.9% من المستخدمين المنزليين، فإن هذا سيفي بالغرض.من غير المحتمل أن يكون لديهم الكثير من جدول التوجيه، وسيفضل GetBestInterface تلقائيًا الاتصال السلكي عبر الاتصال اللاسلكي - لذلك يجب أن تكون جيدًا.استخدم خيار التجاوز لـ 0.1% من الحالات التي أخطأت فيها، ثم توقف.

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

ثم مرة أخرى، لست متأكدًا مما تخطط للقيام به بهذا المحول "المتصل بالإنترنت"، لذلك قد لا يكون الأمر مشكلة كبيرة.

نصائح أخرى

على ما يبدو، يوجد في نظام التشغيل Vista واجهات جديدة تتيح الاستعلام عن الاتصال بالإنترنت والمزيد.نلقي نظرة على واجهات NLM وتحديدا في INetworkConnection - يمكنك الاستعلام على وجه التحديد عما إذا كان اتصال الشبكة به اتصال بالإنترنت باستخدام طريقة GetConnectivity.

أنظر أيضا: الوعي بالشبكة على نظام التشغيل Windows Vistaلسوء الحظ، هذا متاح فقط على نظام التشغيل Vista، لذلك بالنسبة لنظام التشغيل XP، يجب أن أحتفظ بمعلوماتي الإرشادية الأصلية.

سألقي نظرة على جدول التوجيه.أيًا كانت بطاقة واجهة الشبكة (NIC) التي لها مسار 0.0.0.0 وتم تمكينها ولها أقل مقياس، فهي بطاقة واجهة الشبكة التي تقوم حاليًا بإرسال الحزم إلى الإنترنت.

لذا، في حالتي، فإن أهمها هو "شبكة الإنترنت".

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0        10.0.0.10        10.0.0.51     20
          0.0.0.0          0.0.0.0        10.0.0.10        10.0.0.50     25
(much other stuff deleted)

البديل الآخر هو ping أو GetBestInterface 4.2.2.2 - وهو خادم DNS قديم وموقر، تحتفظ به حاليًا GTEI؛سابقًا بواسطة Sprint إذا كنت أتذكر بشكل صحيح.

قم باختبار اتصال google.com من خلال كل بطاقة واجهة شبكة (NIC).

ابدأ > تشغيل > cmd.exe (يعمل هذا في نظامي XP وVista): ipconfig /all

يعرض هذا جميع المعلومات حول الواجهات الموجودة في جهاز الكمبيوتر الخاص بك.يجب أن تحتوي الواجهة "العامة" على عنوان IP عام.للمبتدئين، فإنه لا ينبغي يكون 192.168.x.x أو 10.x.x.x :)

سيُظهر لك تشغيل برنامج Traceroute إلى بعض المواقع العامة.بالطبع، قد يكون هناك أكثر من واجهة واحدة ستوصلك إلى هناك.

انظر إلى جدول التوجيه؟بشكل عام، ما لم تكن تقوم بالتوجيه بين الشبكات في نظام التشغيل Windows (وهو أمر ممكن، ولكنه غير معتاد بالنسبة لجهاز كمبيوتر عميل هذه الأيام)، فإن الواجهة التي تحمل المسار الافتراضي ستكون متصلة بالإنترنت.

سؤالك لم يوضح بالتفصيل سبب قيامك بذلك أو ما الذي تفعله به، لذا لا يمكنني تقديم أي تفاصيل.قد تكون أداة "مسار" أداة سطر الأوامر مفيدة بعض الشيء، ولكن من المحتمل أن تكون هناك مكتبات لأي لغة برمجة تستخدمها للنظر في جدول التوجيه.

لا يمكنك الاعتماد على عنوان IP الخاص بالواجهة (على سبيل المثال، بافتراض أن عنوان RFC-1918 [192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8] ليس هو الإنترنت) نظرًا لأن معظم المواقع لديها نوع من جدار الحماية NATed أو إعداد الوكيل وتكون واجهة "الإنترنت" موجودة بالفعل على شبكة محلية "خاصة" تنقلك إلى الإنترنت.

تحديث:بناءً على معلوماتك الإضافية، يبدو أن لديك حلًا مناسبًا.لست متأكدًا تمامًا من اختيار 0.0.0.0 نظرًا لأن هذه حالة حدودية لعنوان IP - قد يكون ذلك مناسبًا لمزيج معين من النظام الأساسي/اللغة.يبدو (من وصف واجهة برمجة التطبيقات) أنه يمكنك فقط تحديد عنوان، فلماذا لا يوجد عنوان معروف على الإنترنت، على سبيل المثال؟عنوان IP لموقع الويب الخاص بك، أو شيء أكثر عشوائية مثل 65.66.67.68؟فقط تأكد من عدم اختيار أحد عناوين rfc-1918، أو نطاق المضيف المحلي (127.0.0.0/8)، أو البث المتعدد، أو أي نطاق محجوز آخر، وأي عنوان يتحول إلى .mil أو .gov (في حين أنه لا لا يبدو أن getbestinterface يرسل أي حركة مرور، سيكون من الصعب معرفة ذلك من خلال قيام الفيدراليين بتحطيم بابك...:)

وبالنظر إلى وجهة نظر الشبكة، إما أن يتم التوجيه إلى "الإنترنت" في أي وقت.إذا تم تمكين أشياء مثل بروتوكول الشجرة الممتدة على المحول، فقد تجد أن ما قد يكون بطاقة التوجيه في البداية قد لا يكون موجودًا بعد الآن.

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