2016-06-07 99 views
0

WLAN可以具有多個BSSID。我需要發現我連接的BSSID。如何使用C#中的NativeWifi API發現WLAN連接到的BSSID

在NativeWIFI API使用結構WlanAvailableNetwork我能發現我已經連接了WLAN,但硝基甲苯告訴我這是連接的BSSID。

在Struct WlanBssEntry中,我可以獲得任何WLAN的所有BSSID,但是我也無法發現我連接的是哪一個。

我需要的是我連接的WLAN的MAC addrees。這就是爲什麼我想發現我連接的BSSID。

TXS的幫助:d

回答

0

我已經發現了它...... 我會張貼在這裏我的情況下,任何人都解決方案需要在將來...

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:我把LOG寫成一個.csv文件,我用文化來獲取項目分隔符,這樣它就可以在任何地方和文化中工作......例如在巴西和德國,項目的分隔符是「;」但在美國,分隔符是「,」。它會適應任何情況......

下面是代碼來獲得文化和分離......

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