Obtenez BSSID (adresse MAC) du point d'accès sans fil à partir de C#

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#?

notez que je m'intéresse au BSSID du WAP. Ceci est différent de L'adresse MAC de la partie réseau du WAP.

12
demandé sur Iain 2008-10-09 19:21:58

4 réponses

les éléments suivants doivent être exécutés par programmation:

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

ce qui précède montre les adresses MAC sans fil du point d'accès qui est différent de:

arp -a | findstr 192.168.1.254

c'est parce que le point d'accès a 2 adresses MAC. L'un pour l'appareil sans fil et un pour le périphérique réseau. Je veux le MAC sans fil mais obtenir le Mac de réseau en utilisant arp .

utilisant le géré API Wifi :

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);
    }
}
21
répondu Iain 2017-06-26 16:36:06

Ce question raconte comment obtenir tout bit d'information que vous voulez de votre connexion réseau. (Faites défiler vers le bas jusqu'aux réponses en utilisant NetworkInformation)

3
répondu James Curran 2017-05-23 12:25:24
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 de l'erreur de syntaxe comme des accolades. Mais le concept est ici. Vous pouvez créer la fonction de balayage en invoquant périodiquement ce processus. Corrigez-moi si quelque chose va mal.

3
répondu Lennard 2011-11-16 14:13:18

à propos du résultat de L'ARP.EXE programmatically:

L'API Win32 pour obtenir ceci est dans le Helper IP groupe de fonctions et il est appelé GetIpNetTable() . Le P/invoquer la signature pour elle est ici . Vous aurez à écrire un certain code pour marshal les résultats hors de lui, et son un de ces APIs Win32 fun avec des résultats de longueur variable.

une Autre façon de le faire serait d'utiliser Instruments de gestion de fenêtres qui a un bel ensemble de classes d'enveloppement dans le système .De la gestion et du Système.Gestion.L'Instrumentation des espaces de noms . Mais le côté négatif est que le service WMI doit être en cours d'exécution pour que cela fonctionne. J'ai creusé autour mais je ne semble pas trouver l'objet exact dans l'arbre 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érez cette information en utilisant cette API. Peut-être que quelqu'un d'autre viendra avec cette partie.

2
répondu Tim Farley 2008-10-09 16:24:59