C# - 如何访问WLAN信号强度等?

Rob*_*cks 10 c# windows location tracking wlan

许多科学家发表的论文记录了如何通过测量信号强度,到达时间,往返时间等来跟踪通过WLAN连接的设备.任何想法如何使用任何.NET API在Windows中访问这些值?

或者您知道可用于位置跟踪的软件SDK吗?

小智 11

你好,对于WIndows 7这是一个很好的代码,它可以检测所有带有MAC地址RSSI SSID的AP:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using NativeWifi;

class Program
{

    static void Main(string[] args)
    {

        WlanClient client = new WlanClient();
        // Wlan = new WlanClient();
        try
        {
            foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
            {

                Wlan.WlanBssEntry[] wlanBssEntries = wlanIface.GetNetworkBssList();

                foreach (Wlan.WlanBssEntry network in wlanBssEntries)
                {
                    int rss = network.rssi;
                    //     MessageBox.Show(rss.ToString());
                    byte[] macAddr = network.dot11Bssid;

                    string tMac = "";

                    for (int i = 0; i < macAddr.Length; i++)
                    {

                        tMac += macAddr[i].ToString("x2").PadLeft(2, '0').ToUpper();

                    }



                    Console.WriteLine("Found network with SSID {0}.", System.Text.ASCIIEncoding.ASCII.GetString(network.dot11Ssid.SSID).ToString());

                    Console.WriteLine("Signal: {0}%.", network.linkQuality);

                    Console.WriteLine("BSS Type: {0}.", network.dot11BssType);

                    Console.WriteLine("MAC: {0}.", tMac);

                    Console.WriteLine("RSSID:{0}", rss.ToString());


                }
                Console.ReadLine();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        }
    }  
}
Run Code Online (Sandbox Code Playgroud)

我希望它会有所帮助

  • 这个答案应该提到了nativewifi命名空间可以在这里找到http://managedwifi.codeplex.com/ (3认同)
  • 嗨Cody,你可以扩展这个例子来连接到一个可用的wifi ssids吗? (2认同)

Tay*_*ese 10

托管无线上网API将提供信号强度信息.这是一个代码片段,改编自我之前提出的问题,并在此处得到解答:

static void Main(string[] args)
{
    WlanClient client = new WlanClient();
    foreach ( WlanClient.WlanInterface wlanIface in client.Interfaces )
    {
        Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList( 0 );
        foreach ( Wlan.WlanAvailableNetwork network in networks )
        {
            Console.WriteLine( "Found network with SSID {0} and Siqnal Quality {1}.", GetStringForSSID(network.dot11Ssid), network.wlanSignalQuality);
        }
    }
}

static string GetStringForSSID(Wlan.Dot11Ssid ssid)
{
    return Encoding.ASCII.GetString(ssid.SSID, 0, (int) ssid.SSIDLength);
}
Run Code Online (Sandbox Code Playgroud)