如何獲得我的系統使用C#連接的無線接入點的BSSID/MAC(媒體訪問控制)地址?從C#獲取無線接入點的BSSID(MAC地址)
請注意,我對WAP的BSSID感興趣。這與WAP網絡部分的MAC地址不同。
如何獲得我的系統使用C#連接的無線接入點的BSSID/MAC(媒體訪問控制)地址?從C#獲取無線接入點的BSSID(MAC地址)
請注意,我對WAP的BSSID感興趣。這與WAP網絡部分的MAC地址不同。
以下需要被編程執行:
netsh wlan show networks mode=Bssid | findstr "BSSID"
上面示出了接入點的無線MAC地址,其不同於:
arp -a | findstr 192.168.1.254
這是因爲接入點有2個MAC地址。一個用於無線設備,另一個用於網絡設備。我想要無線MAC,但使用arp獲得網絡MAC。
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);
}
}
這個question告訴你如何從你的網絡連接中獲取任何你想要的信息。 (向下滾動到使用NetworkInformation答案)
關於獲得該結果從ARP.EXE編程:
的Win32 API的獲得,這是IP Helper組的功能,它被稱爲GetIpNetTable()。該P/Invoke signature for it is here。你將不得不編寫一些代碼來編組結果,以及其結果可變的那些有趣的Win32 API中的一個。
另一種方法是使用Windows Management Instrumentation,它在System.Management and System.Management.Instrumentation namespaces中有一套很好的包裝類。但缺點是WMI服務必須運行才能正常工作。我挖了一遍,但我似乎無法找到WMI樹中包含等效信息的確切對象。我很確定它存在,因爲我看到網絡上的第三方工具聲稱使用此API檢索此信息。也許別人會用那個部分加入。
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);
}
}
要小心像大括號這樣的語法錯誤。但這個概念在這裏。您可以通過定期調用此過程來創建掃描功能。如果出現問題,請糾正我。
C#在MAC上不起作用。我無法抗拒。 :P – 2008-10-09 15:23:53