Pergunta

Eu gostaria de saber se existe qualquer classe .Net que me permite conhecer o SSID da rede sem fio que estou conectado. Até agora eu só encontrei a biblioteca link abaixo. É o melhor que pode obter ou devo usar alguma outra coisa? Managed WiFi ( http://www.codeplex.com/managedwifi )

O método que explora WMI funciona para Windows XP, mas é não trabalhar mais com o Windows Vista.

Foi útil?

Solução

Eu resolvidos usando a biblioteca. Resultou ser bastante fácil trabalhar com as classes fornecidas:

Primeiro eu tive que criar um objeto WlanClient

wlan = new WlanClient();

E então eu posso obter a lista dos SSIDs o PC está ligado ao com este código:

Collection<String> connectedSsids = new Collection<string>();

foreach (WlanClient.WlanInterface wlanInterface in wlan.Interfaces)
{
   Wlan.Dot11Ssid ssid = wlanInterface.CurrentConnection.wlanAssociationAttributes.dot11Ssid;
   connectedSsids.Add(new String(Encoding.ASCII.GetChars(ssid.SSID,0, (int)ssid.SSIDLength)));
}

Outras dicas

Estávamos usando a biblioteca wi-fi conseguiu, mas ele lança exceções se a rede estiver desconectado durante uma consulta.

Tente:

var process = new Process
{
    StartInfo =
    {
    FileName = "netsh.exe",
    Arguments = "wlan show interfaces",
    UseShellExecute = false,
    RedirectStandardOutput = true,
    CreateNoWindow = true
    }
};
process.Start();

var output = process.StandardOutput.ReadToEnd();
var line = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(l => l.Contains("SSID") && !l.Contains("BSSID"));
if (line == null)
{
    return string.Empty;
}
var ssid = line.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries)[1].TrimStart();
return ssid;

Parece que este vai fazer o que quiser:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI",
"SELECT * FROM MSNdis_80211_ServiceSetIdentifier");


foreach (ManagementObject queryObj in searcher.Get())
{
    Console.WriteLine("-----------------------------------");
    Console.WriteLine("MSNdis_80211_ServiceSetIdentifier instance");
    Console.WriteLine("-----------------------------------");

    if(queryObj["Ndis80211SsId"] == null)
        Console.WriteLine("Ndis80211SsId: {0}",queryObj["Ndis80211SsId"]);
    else
    {
        Byte[] arrNdis80211SsId = (Byte[])
        (queryObj["Ndis80211SsId"]);
        foreach (Byte arrValue in arrNdis80211SsId)
        {
            Console.WriteLine("Ndis80211SsId: {0}", arrValue);
        }
    }
}

http://bytes.com/groups/net- c / 657473-wmi-wi-fi-descoberta

Você vai ter que usar a API WLAN nativa. Há uma longa discussão sobre isso aqui . Aparentemente, isso é o que gerenciado usa API Wi-Fi, por isso vai ser mais fácil para você usá-lo se você não tem quaisquer restrições ao utilizar o código LGPL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top