2016-06-07 3 views
0

Un WLAN peut avoir plusieurs BSSID. J'ai besoin de découvrir quel BSSID je suis connecté.Comment faire pour découvrir le BSSID auquel votre WLAN est connecté en utilisant l'API NativeWifi en C#

Dans l'API NativeWIFI en utilisant la struct WlanAvailableNetwork je peux découvrir le réseau local sans fil que je suis connecté, mais il dnt me dire qui est le BSSID connecté.

Dans Struct WlanBssEntry, je peux obtenir tous les BSSID de n'importe quel WLAN, mais je ne peux pas non plus découvrir lequel je suis connecté.

Tout ce dont j'ai besoin, ce sont les add-ons MAC du WLAN auquel je suis connecté. C'est pourquoi je veux découvrir quel BSSID je suis connecté.

Txs pour l'aide: D

Répondre

0

Je l'ai déjà découvert ... Je signalerai ici ma solution au cas où quelqu'un dont il a besoin à l'avenir ...

using NativeWifi; 
public void GetLog(int Count) 
     { 
      string Conectividade = "Disc";//Initi variable Conectividade as Disconnected 
      string RRate = "0";//Initi variable RRate as 0 
      string TRate = "0";//Initi variable TRate as 0 

      WlanClient client = new WlanClient(); 
      foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)// Get the WLANs available 
      { 
       Wlan.WlanAssociationAttributes conAttributes = wlanIface.CurrentConnection.wlanAssociationAttributes;//Get the Attributes of current connection 
       string ConnectedSSID = Encoding.ASCII.GetString(conAttributes.dot11Ssid.SSID).ToString();//Save the SSID of WLAN connected with 
       string ReceivedRate = conAttributes.rxRate.ToString();//Save the receipted rate of the connected WLAN 
       string TransmitededRate = conAttributes.txRate.ToString();//Save the transmitted rate of the connected WLAN  
       byte[] ConnectedMacAddr = conAttributes.dot11Bssid;//MAC of the BSSID in which the WLAN is connected with 
       string ConMac = ""; 
       for (int i = 0; i < ConnectedMacAddr.Length;     { 
        ConMac += ConnectedMacAddr[i].ToString("x2").PadLeft(2, '0').ToUpper();//ConMac sera o MAC da BSSID conectada 
       } 

       Wlan.WlanBssEntry[] wlanBssEntries = wlanIface.GetNetworkBssList();//Vector with the BSS available 
       Wlan.WlanAvailableNetwork[] wlanAvailableNetwork = wlanIface.GetAvailableNetworkList(0);//Vector with the WLANS available 

       WriteLog("\"ID" + listSeparatorQuotes + "DateTime" + listSeparatorQuotes + "SSID" + listSeparatorQuotes + "MAC" + listSeparatorQuotes + "Type" + listSeparatorQuotes + "Auth" + listSeparatorQuotes + "Cipher" + listSeparatorQuotes + "Connection" + listSeparatorQuotes + "RecivRate" + listSeparatorQuotes + "TransmiRate" + listSeparatorQuotes + "SignalQuality" + listSeparatorQuotes + "NumberOfBSSIDS\"", path, "WLANs" + StartDay + StartHour + ".csv"); 

       foreach (Wlan.WlanAvailableNetwork AVnetwork in wlanAvailableNetwork) 
       { 
        string SSIDatual = Encoding.ASCII.GetString(AVnetwork.dot11Ssid.SSID).ToString();//Actual SSID 
        if(SSIDatual.Equals(ConnectedSSID)) 
        { 
         Conectividade = "Con"; 
         RRate = ReceivedRate; 
         TRate = TransmitededRate; 
        } 
        //___________________________ wlanAvailableNetwork ___________________________ 
        WriteLog(Count.ToString() + listSeparator + System.DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss") + listSeparator + SSIDatual + listSeparator + ConMac + listSeparator + AVnetwork.dot11BssType + listSeparator + AVnetwork.dot11DefaultAuthAlgorithm + listSeparator + AVnetwork.dot11DefaultCipherAlgorithm + listSeparator + Conectividade + listSeparator + RRate + listSeparator + TRate + listSeparator + AVnetwork.wlanSignalQuality + listSeparator + AVnetwork.numberOfBssids + "\"", path, "WLANs" + StartDay + StartHour + ".csv");//Its a function that's writes a log in the selected path...case you need this function send me a message! 
        //_________________________ End wlanAvailableNetwork _________________________ 
        Conectividade = "Disc";//Reinitialize the value of Conectividade      RRate = "0";//Reinitialize the value of RRate 
        TRate = "0";//Reinitialize the value of TRate 
       } 
       foreach (Wlan.WlanBssEntry network in wlanBssEntries)// Get all existent BSSIDs 
       { 
        int rss = network.rssi; 
        byte[] macAddr = network.dot11Bssid; 
        string tMac = ""; 

        for (int i = 0; i < macAddr.Length; i++) 
        { 
         tMac += macAddr[i].ToString("x2").PadLeft(2, '0').ToUpper(); 
        } 

        //___________________________ wlanBSSEntries __________________________ 
        WriteLog(Count.ToString() + listSeparator + System.DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss") + listSeparator + System.Text.ASCIIEncoding.ASCII.GetString(network.dot11Ssid.SSID).ToString() + listSeparator + network.dot11BssType + listSeparator + network.chCenterFrequency + listSeparator + network.linkQuality + listSeparator + rss.ToString() + listSeparator + tMac, path, "BSSIDs" + StartDay + StartHour + ".csv"); 
        //_________________________ End wlanBSSEntries _________________________ 



       } 
       Console.ReadLine(); 
      } 
     } 

OBS: Je J'écris le LOG sous forme de fichier .csv, et j'utilise la culture pour obtenir le séparateur d'éléments, de cette façon ça marchera dans n'importe quel endroit et culture ... par exemple au Brésil et en Allemand le séparateur de l'élément est un ";", mais aux Etats-Unis, le séparateur est un ",". Il adaptera à toutes les situations ...

Voici le code pour obtenir la culture et la séparation ...

using System.Globalization; 
private static string listSeparator = CultureInfo.CurrentCulture.TextInfo.ListSeparator; 
private static string listSeparatorQuotes = "\"" + listSeparator + "\"";