Question

Comment obtenir l'adresse BSSID / MAC (contrôle d'accès au support) du point d'accès sans fil auquel mon système est connecté à l'aide de C #?

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

Était-ce utile?

La solution

Les opérations suivantes doivent être exécutées par programme:

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

Les informations ci-dessus indiquent les adresses MAC sans fil du point d'accès, qui sont différentes de:

arp -a | findstr 192.168.1.254

Cela est dû au fait 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 le MAC en réseau utilise arp .

Utilisation de la API Wifi gérée :

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

Autres conseils

Cette question indique comment extraire n'importe quelle information de votre connexion réseau. (Faites défiler les réponses à l'aide de NetworkInformation)

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 telles que les accolades. Mais le concept est là. Vous pouvez créer une fonction de numérisation en appelant périodiquement ce processus. Corrigez-moi si quelque chose ne va pas.

À propos de l'obtention de ce résultat à partir d'ARP.EXE par programme:

L’API Win32 pour obtenir cela se trouve dans la IP Helper groupe de fonctions appelé GetIpNetTable () . La la signature P / Invoke est disponible ici . Vous devrez écrire du code pour rassembler les résultats, et c'est l'une de ces amusantes API Win32 avec des résultats de longueur variable.

Une autre solution consiste à utiliser Windows. Instrumentation de gestion qui contient un bel ensemble de classes wrapper dans Espaces de noms System.Management et System.Management.Instrumentation . Mais l'inconvénient est que le service WMI doit être en cours d'exécution pour que cela fonctionne. J'ai fouillé mais je n'arrive pas à trouver l'objet exact dans l'arborescence WMI qui contient les informations équivalentes. Je suis presque sûr qu'il existe car je vois sur le net des outils tiers qui prétendent récupérer ces informations à l'aide de cette API. Peut-être que quelqu'un d'autre va jouer avec cette partie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top