2016-06-07 100 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 + "\""; 
相关问题