2009-11-06 37 views
10

Muchos científicos han publicado papers documentando cómo los dispositivos conectados a través de WLAN pueden rastrearse midiendo la intensidad de la señal, la hora de llegada, el tiempo de ida y vuelta, etc. ¿Alguna idea de cómo puedo acceder a estos valores en Windows usando cualquier API .NET?C# - ¿Cómo accedo a la intensidad de la señal WLAN y a otras?

¿O conoce los SDK de software ya disponibles para el seguimiento de la ubicación?

Respuesta

11

hola para Windows 7 es un buen wich código puede detectar todos los AP con MAC dirección RSSI 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); 
     } 

     } 
    } 
} 

Espero que sea útil disfrutar de

+2

Hola Cody, ¿podrías extender este ejemplo para establecer una conexión con uno de los ssids wifi disponibles? –

+3

esta respuesta debería haber mencionado que el espacio de nombres nativewifi se puede encontrar aquí http://managedwifi.codeplex.com/ – Joe

+0

¿Es posible encontrar el modo Wifi como 802.11n, 802.11g? –

1

Windows en sí proporciona un Location API ahora.

+0

Buena idea, pero sin mencionar el seguimiento WLAN, están asumiendo que tenemos dispositivos GPS ... lentos e inexactos. –

+0

La API de ubicación es independiente de la tecnología "predeterminada", lo que significa que puede tener entrada desde cualquier fuente de ubicación. Si desea usar WLAN, es solo una cuestión de escribir un "controlador" de origen para Windows. Esto permitirá que todas las aplicaciones aptas para la API de Ubicación puedan acceder a su fuente, y de manera similar su aplicación puede usar varias fuentes. Sin embargo, encontrará que para el posicionamiento en interiores, la WLAN no es la mejor solución disponible. – andy

9

El Managed Wifi API proporcionará información sobre la intensidad de la señal. He aquí un fragmento de código adaptado a partir de una pregunta previamente posé y fue respondida 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 Esa es una buena respuesta. ¡Muy claro! –

Cuestiones relacionadas