2008-10-09 7 views
12

Comment puis-je obtenir l'adresse BSSID/MAC (Media Access Control) du point d'accès sans fil auquel mon système est connecté en utilisant C#?Obtenir BSSID (adresse MAC) du point d'accès sans fil à partir de C#

Notez que je suis intéressé par le BSSID du WAP. Ceci est différent de l'adresse MAC de la partie réseau du WAP.

+5

C# ne fonctionne pas sur les MAC. Je n'ai pas pu résister. : P –

+4

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

Répondre

21

Les besoins suivants à exécuter par programme:

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

Le ci-dessus montre les adresses MAC sans fil du point d'accès qui est différent de:

arp -a | findstr 192.168.1.254 

Cette est parce que le point d'accès a 2 adresses MAC. Un pour le périphérique sans fil et un pour le périphérique réseau. Je veux le MAC sans fil, mais obtenir le réseau MAC en utilisant arp.

Utilisation du 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

Cette question vous indique comment obtenir les informations que vous voulez sur votre connexion réseau. (Faites défiler les réponses à l'aide NetworkInformation)

2

A propos d'obtenir ce résultat de ARP.EXE programme:

L'API Win32 pour obtenir c'est dans le groupe IP Helper des fonctions et il est appelé GetIpNetTable(). Le P/Invoke signature for it is here. Vous devrez écrire du code pour rassembler les résultats, et c'est l'une de ces API Win32 amusantes avec des résultats de longueur variable.

Une autre façon de faire cela serait d'utiliser Windows Management Instrumentation qui a un bon ensemble de classes wrapper dans le System.Management and System.Management.Instrumentation namespaces. Mais l'inconvénient est que le service WMI doit fonctionner pour que cela fonctionne. J'ai creusé autour mais je ne peux pas sembler trouver l'objet exact dans l'arbre de WMI qui contient l'information équivalente. Je suis assez sûr qu'il existe parce que je vois des outils tiers sur le net qui prétendent récupérer cette information en utilisant cette API. Peut-être que quelqu'un d'autre interviendra dans cette partie.

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

Méfiez-vous des erreurs de syntaxe comme les accolades tout cela. Mais le concept est ici. Vous pouvez créer une fonction d'analyse en invoquant périodiquement ce processus. Corrigez-moi si quelque chose ne va pas.

Questions connexes