Получить SSID беспроводной сети, к которой я подключен с C # .Net в Windows Vista - PullRequest
24 голосов
/ 11 января 2009

Я хотел бы знать, существует ли какой-либо класс .Net, который позволяет мне узнать SSID беспроводной сети, к которой я подключен. Пока я только нашел библиотеку, связанную ниже. Это лучшее, что я могу получить, или я должен использовать что-то еще? Управляемый WiFi (http://www.codeplex.com/managedwifi)

Метод, использующий WMI , работает для Windows XP, но больше не работает с Windows Vista.

Ответы [ 5 ]

24 голосов
/ 11 января 2009

Я решил использовать библиотеку. Получилось довольно легко работать с предоставленными классами:

Сначала я должен был создать объект WlanClient

wlan = new WlanClient();

И тогда я могу получить список SSID, к которым подключен ПК, с помощью этого кода:

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)));
}
4 голосов
/ 23 августа 2014

Мы использовали управляемую библиотеку Wi-Fi, но она выдает исключения, если сеть отключена во время запроса.

Попытка:

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;
3 голосов
/ 11 января 2009

Похоже, это будет делать то, что вы хотите:

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-wifi-discovery

2 голосов
/ 03 февраля 2009
0 голосов
/ 11 января 2009

Вы собираетесь использовать собственный WLAN API. Существует долгая дискуссия по этому поводу здесь . Очевидно, это то, что использует API Managed Wifi, поэтому вам будет проще его использовать, если у вас нет никаких ограничений на использование кода LGPL.

...