احصل على BSSID (عنوان MAC) لنقطة الوصول اللاسلكية من C#

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

  •  06-07-2019
  •  | 
  •  

سؤال

كيف يمكنني الحصول على عنوان BSSID / MAC (التحكم في الوصول إلى الوسائط) لنقطة الوصول اللاسلكية ، فإن نظامي متصل باستخدام C#؟

لاحظ أنني مهتم بـ BSSID من WAP. هذا يختلف عن عنوان MAC لجزء الشبكات من WAP.

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

المحلول

يجب تنفيذ ما يلي برمجيًا:

netsh wlan show networks mode=Bssid | findstr "BSSID"

يوضح ما ورد أعلاه عناوين MAC اللاسلكية لنقطة الوصول التي تختلف عن:

arp -a | findstr 192.168.1.254

وذلك لأن نقطة الوصول لديها عناوين Mac. واحد للجهاز اللاسلكي وواحد لجهاز الشبكات. أريد جهاز Mac اللاسلكي ولكن الحصول على جهاز Mac الشبكات باستخدام ARP.

باستخدام تدار WiFi API:

var wlanClient = new WlanClient();
foreach (WlanClient.WlanInterface wlanInterface in wlanClient.Interfaces)
{
    Wlan.WlanBssEntry[] wlanBssEntries = wlanInterface.GetNetworkBssList();
    foreach (Wlan.WlanBssEntry wlanBssEntry in wlanBssEntries)
    {
        byte[] macAddr = wlanBssEntry.dot11Bssid;
        var macAddrLen = (uint) macAddr.Length;
        var str = new string[(int) macAddrLen];
        for (int i = 0; i < macAddrLen; i++)
        {
            str[i] = macAddr[i].ToString("x2");
        }
        string mac = string.Join("", str);
        Console.WriteLine(mac);
    }
}

نصائح أخرى

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

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {       
        Process proc = new Process();
        proc.StartInfo.CreateNoWindow = true;
        proc.StartInfo.FileName = "cmd";

        proc.StartInfo.Arguments = @"/C ""netsh wlan show networks mode=bssid | findstr BSSID """;

        proc.StartInfo.RedirectStandardOutput = true;       
        proc.StartInfo.UseShellExecute = false;
        proc.Start();
        string output = proc.StandardOutput.ReadToEnd();
        proc.WaitForExit(); 

        Console.WriteLine(output); 
    }   
}

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

حول الحصول على هذه النتيجة من arp.exe برمجيا:

API Win32 للحصول على هذا في مساعد IP مجموعة من الوظائف وتسمى getipnettable (). ال P/استدعاء توقيعه هنا. سيتعين عليك كتابة بعض التعليمات البرمجية لتنشئة النتائج منه ، وواحدة من واجهات برمجة تطبيقات Win32 الممتعة مع نتائج الطول المتغير.

هناك طريقة أخرى للقيام بذلك هي الاستخدام نوافذ إدارة الأجهزة التي لديها مجموعة جميلة من فصول الغلاف في System.Management و System.Management.Instrumentation مساحات الأسماء. لكن الجانب السلبي هو أن خدمة WMI يجب أن تعمل حتى تعمل. لقد حفرت ، لكن لا يمكنني العثور على الكائن الدقيق في شجرة WMI التي تحتوي على المعلومات المكافئة. أنا متأكد من وجوده لأنني أرى أدوات الطرف الثالث على الشبكة التي تدعي استرداد هذه المعلومات باستخدام واجهة برمجة التطبيقات هذه. ربما شخص آخر سوف يتناغم مع هذا الجزء.

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