2009-11-06 3 views
10

Многие ученые опубликовали papers, где описано, как устройства, подключенные через WLAN, можно отслеживать, измеряя его силу сигнала, время прибытия, время в пути и т. Д. Любая идея, как я могу получить доступ к этим значениям в Windows с помощью любого .NET API?C# - Как получить доступ к уровню сигнала WLAN и другим?

Или вы знаете программные SDK, которые уже доступны для отслеживания местоположения?

ответ

11

привет для WIndows 7 это хороший код которым может обнаружить все точки доступа с MAC Адрес ПУПС SSID:

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); 
     } 

     } 
    } 
} 

я надеюсь, что будет полезно пользоваться

+2

Привет, Коди, не могли бы вы расширить этот пример, чтобы установить соединение с одним из доступных wifi ssids? –

+3

Этот ответ должен был упомянуть, что пространство имен nativewifi можно найти здесь http://managedwifi.codeplex.com/ – Joe

+0

Можно ли найти Wifi-режим, например 802.11n, 802.11g? –

1

Windows сама предоставляет Location API.

+0

Хорошая идея, но не упоминание о отслеживании WLAN, они предполагают, что у нас есть устройства GPS ... медленные и неточные. –

+0

API-интерфейс «По умолчанию» - агностик, то есть он может иметь вход от любого источника местоположения. Если вы хотите использовать WLAN, это просто вопрос написания исходного драйвера для Windows. Это позволит всем приложениям, имеющим доступ к API-интерфейсу, использовать ваш источник, и аналогично ваше приложение может использовать несколько источников. Однако вы обнаружите, что для внутреннего позиционирования WLAN не является лучшим решением. – andy

9

Managed Wifi API предоставит информацию о силе сигнала. Вот фрагмент кода заимствована из вопроса я ранее поставленный и ответил here:

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); 
} 
+2

+1 Это хороший ответ. Очень ясно! –

Смежные вопросы