Как я могу получить адрес BSSID/MAC (Media Access Control) точки беспроводного доступа, к которой подключена моя система, с помощью С#?
Обратите внимание, что меня интересует BSSID WAP. Это отличается от MAC-адреса сетевой части WAP.
Как я могу получить адрес BSSID/MAC (Media Access Control) точки беспроводного доступа, к которой подключена моя система, с помощью С#?
Обратите внимание, что меня интересует BSSID WAP. Это отличается от MAC-адреса сетевой части WAP.
Следующее должно выполняться программно:
netsh wlan show networks mode=Bssid | findstr "BSSID"
Вышеуказанные беспроводные MAC-адреса точки доступа отличаются от:
arp -a | findstr 192.168.1.254
Это связано с тем, что точка доступа имеет 2 MAC-адреса. Один для беспроводного устройства и один для сетевого устройства. Я хочу беспроводной MAC, но получаю MAC-адрес сети с помощью arp.
Используя Управляемый API Wifi:
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);
}
}
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);
}
}
Остерегайтесь синтаксической ошибки, такой как фигурные скобки. Но концепция здесь. Вы можете создавать функцию сканирования, периодически вызывая этот процесс. Поправьте меня, если что-то пойдет не так.
Этот question рассказывает, как получить любой бит информации, которую вы хотите получить от своего сетевого подключения. (Прокрутите вниз до ответов, используя NetworkInformation)
О том, как получить программный результат от ARP.EXE:
API Win32 для его получения находится в IP Helper группе функций и называется GetIpNetTable(). P/Invoke для него здесь. Вам придется написать код, чтобы вывести результаты из него, и его один из тех забавных API Win32 с переменными длинными результатами.
Другой способ сделать это - использовать Инструмент управления Windows, который имеет хороший набор классов-оболочек в System.Management и System.Management.Instrumentation namespaces. Но нижняя сторона - это служба WMI, которая должна работать для этого. Я вырыл, но я не могу найти точный объект в дереве WMI, который содержит эквивалентную информацию. Я уверен, что он существует, потому что я вижу сторонние инструменты в сети, которые утверждают, что извлекают эту информацию с помощью этого API. Может быть, кто-то еще заговорит с этой частью.