2008-10-09 67 views
12

如何獲得我的系統使用C#連接的無線接入點的BSSID/MAC(媒體訪問控制)地址?從C#獲取無線接入點的BSSID(MAC地址)

請注意,我對WAP的BSSID感興趣。這與WAP網絡部分的MAC地址不同。

+5

C#在MAC上不起作用。我無法抗拒。 :P – 2008-10-09 15:23:53

回答

21

以下需要被編程執行:

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

上面示出了接入點的無線MAC地址,其不同於:

arp -a | findstr 192.168.1.254 

這是因爲接入點有2個MAC地址。一個用於無線設備,另一個用於網絡設備。我想要無線MAC,但使用arp獲得網絡MAC。

使用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); 
    } 
} 
3

這個question告訴你如何從你的網絡連接中獲取任何你想要的信息。 (向下滾動到使用NetworkInformation答案)

2

關於獲得該結果從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檢索此信息。也許別人會用那個部分加入。

4
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); 
    } 
} 

要小心像大括號這樣的語法錯誤。但這個概念在這裏。您可以通過定期調用此過程來創建掃描功能。如果出現問題,請糾正我。