2008-10-09 4 views
12

Wie kann ich die BSSID/MAC (Media Access Control) -Adresse des drahtlosen Zugriffspunkts erhalten, mit dem mein System über C# verbunden ist?BSSID (MAC-Adresse) des drahtlosen Zugriffspunkts von C#

Beachten Sie, dass ich an der BSSID des WAP interessiert bin. Dies unterscheidet sich von der MAC-Adresse des Netzwerkabschnitts des WAP.

+5

C# funktioniert nicht auf MACs. Ich konnte nicht widerstehen. : P –

+4

http://www.mono-project.com/Main_Page – Iain

Antwort

21

Die folgenden Anforderungen programmatisch ausgeführt werden:

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

Die oben zeigt die Wireless-MAC-Adressen des Access Points, die aus unterschiedlichen ist:

arp -a | findstr 192.168.1.254 

Diese ist, weil der Access Point 2 MAC-Adressen hat. Eine für das drahtlose Gerät und eine für das Netzwerkgerät. Ich möchte die drahtlose MAC, aber erhalten Sie die Netzwerk-MAC mit arp.

Mit dem 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

Diese question erzählt, wie Sie aus Ihrer Netzwerkverbindung ein bisschen Information erhalten können. (Blättern Sie zu den Antworten unten mit NetworkInformation)

2

über dieses Ergebnis aus arp.exe immer programmatisch:

der Win32-API zu bekommen dies in der IP Helper Gruppe von Funktionen ist, und es wird GetIpNetTable() genannt. Die P/Invoke signature for it is here. Sie müssen etwas Code schreiben, um die Ergebnisse daraus hervorzubringen, und es ist eines dieser spaßigen Win32-APIs mit variabler Länge.

Eine andere Möglichkeit, dies zu tun, wäre Windows Management Instrumentation, die eine schöne Reihe von Wrapper-Klassen in der haben. Aber der Nachteil ist, dass der WMI-Dienst ausgeführt werden muss, damit das funktioniert. Ich habe gegraben, aber ich kann nicht scheinen, das genaue Objekt in der WMI-Struktur zu finden, die die äquivalente Information enthält. Ich bin mir ziemlich sicher, dass es existiert, weil ich Tools von Drittanbietern im Netz sehe, die behaupten, diese Informationen mit dieser API abzurufen. Vielleicht wird jemand anderes mit diesem Teil zusammenspielen.

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

von Syntaxfehler Vorsicht wie geschweiften Klammern das alles. Aber das Konzept ist hier. Sie können die Scan-Funktion erstellen, indem Sie diesen Prozess regelmäßig aufrufen. Korrigiere mich, wenn etwas schief geht.

Verwandte Themen