【问题标题】:Check if ONLY connected to WiFi C#检查是否仅连接到 WiFi C#
【发布时间】:2016-07-24 00:34:51
【问题描述】:

我目前正在使用Managed Wifi API 来获取设备所连接的无线网络的 SSID。这是我的方法:

public string getSSID() {
    try {
        WlanClient wlan = new WlanClient();
        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)));
        }
        return ConnectedSSIDs[0];
    } catch (Win32Exception) {
        return EMPTY;
    } catch (Exception Ex) {
        throw Ex;
    }
}

目前,据此,我可以确定我是连接到 Wifi 和以太网(因为在那种情况下仍然存在 SSID)还是只连接到以太网。

除此之外,我想以某种方式推断我是否只是连接到 Wifi 而不是以太网。
我看过:

  1. Win32_NetworkAdapterConfiguration
  2. Win32_NetworkAdapter

令人惊讶的是,查看 Win32_NetworkAdapterAdapterType 属性(仅连接到 Wifi 时)我仍然返回 "Ethernet 802.3" 而不是 “无线” 这是我所期望的。
不幸的是,我认为 Managed Wifi API 中没有一种方法可以实现我想要的。

编辑

所以我定义了这 3 个常量:

private const string WIFI_AND_ETHERNET = "WIFI & ETHERNET";
private const string WIFI = "WIFI";
private const string ETHERNET = "ETHERNET";

目前我上面展示的方法可以推断网络连接是ETHERNET还是WIFI_AND_ETHERNET
它通过检查 SSID 是否可用/是否可见来做到这一点。如果是这样,那么它将返回WIFI_AND_ETHERNET,但如果没有,它将仅返回ETHERNET

我现在需要的是一种方法来区分网络连接是通过WIFIONLY还是WIFI_AND_ETHERNET一起

【问题讨论】:

标签: c# network-programming


【解决方案1】:

像这样试试。

 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 lanProcess = new Process
        {
            StartInfo =
                      {
                          FileName = "netsh.exe",
                          Arguments = "interface show interface name=\"Ethernet\" ",
                          UseShellExecute = false,
                          RedirectStandardOutput = true,
                          CreateNoWindow = true
                      }
        };
        lanProcess.Start();
        var lanOutput = lanProcess.StandardOutput.ReadToEnd();
        var lanState = lanOutput.Split(new[] { Environment.NewLine },StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(l => l.Contains("Connect state"));
        var wlanState = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(l => l.Contains("State"));
        if (!wlanState.Contains("disconnected")&&lanState.Contains("Disconnected"))

        {
            Console.WriteLine("Wi-Fi");
        }
        else if(wlanState.Contains("disconnected") && !lanState.Contains("Disconnected"))
        {
            Console.WriteLine("Ethernet");
        }
        else if (!wlanState.Contains("disconnected") && !lanState.Contains("Disconnected"))
        {
            Console.WriteLine("Wi-Fi & Ethernet");
        }
        else
        {
            Console.WriteLine("Not connected");
        }
        Console.Read();

【讨论】:

    【解决方案2】:

    像这样试试。

     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 state = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(l => l.Contains("State"));
            if (!state.Contains("disconnected"))
            {
                Console.WriteLine("Wi-Fi");
            }
            else
            {
                Console.WriteLine("Ethernet");
            }
            Console.Read();
    

    【讨论】:

    • 不起作用。当连接到以太网和 Wifi 时,连接到 Wifi 时返回
    猜你喜欢
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    相关资源
    最近更新 更多