Search code examples
c#wifi

Get BSSID (MAC address) of wireless access point from C#


How can I get the BSSID / MAC (Media Access Control) address of the wireless access point my system is connected to using C#?

Note that I'm interested in the BSSID of the WAP. This is different from the MAC address of the networking portion of the WAP.


Solution

  • The following needs to be executed programmatically:

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

    The above shows the access point's wireless MAC addresses which is different from:

    arp -a | findstr 192.168.1.254
    

    This is because the access point has 2 MAC addresses. One for the wireless device and one for the networking device. I want the wireless MAC but get the networking MAC using arp.

    Using the Managed 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);
        }
    }