最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# WIFI連接狀態(tài)檢測(cè)的幾種方法小結(jié)

 更新時(shí)間:2026年05月14日 08:59:23   作者:她說彩禮65萬  
文章分析了為何在WiFi斷開后仍能ping通,并提出了多種檢測(cè)WiFi狀態(tài)的方法,包括清除ARP緩存、使用NetworkInterface、WMI及檢測(cè)SSID等,對(duì)比了各種方法的可靠性和速度,建議優(yōu)先采用NetworkInterface或直接檢測(cè)SSID的方法,需要的朋友可以參考下

問題分析

1.網(wǎng)關(guān)IP ≠ 熱點(diǎn)IP

獲取到的網(wǎng)關(guān)IP(Gateway IP)通常是指默認(rèn)路由網(wǎng)關(guān),不一定就是直接連接的WiFi熱點(diǎn)的IP。例如:

WiFi熱點(diǎn) IP:192.168.1.1
網(wǎng)關(guān) IP:192.168.1.1  (此時(shí)相同)

但在復(fù)雜網(wǎng)絡(luò)中可能:
WiFi熱點(diǎn) IP:192.168.1.1
網(wǎng)關(guān) IP:10.0.0.1  (被轉(zhuǎn)發(fā),網(wǎng)關(guān)在遠(yuǎn)端)

2.ARP緩存導(dǎo)致虛假ping成功

當(dāng)WiFi斷掉后,仍然能ping通的主要原因是 ARP緩存

WiFi斷掉時(shí)序:
時(shí)間1: WiFi連接 → ping 192.168.1.1 → 成功 → ARP緩存MAC地址
時(shí)間2: WiFi斷開連接
時(shí)間3: ping 192.168.1.1 → 使用緩存的MAC地址 → 看似成功(但實(shí)際上沒有發(fā)出去)

解決方案

方案1:清除ARP緩存后再ping(驗(yàn)證真實(shí)連接)

using System.Diagnostics;

/// <summary>
/// 清除ARP緩存并驗(yàn)證WiFi實(shí)際連接狀態(tài)
/// </summary>
public static bool VerifyWiFiConnection(string targetIP)
{
    try
    {
        // 步驟1:清除ARP緩存
        ProcessStartInfo psi = new ProcessStartInfo
        {
            FileName = "cmd.exe",
            Arguments = "/c ipconfig /all /flushdns && arp -d",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        };
        
        using (Process process = Process.Start(psi))
        {
            process.WaitForExit();
        }
        
        Thread.Sleep(500); // 等待ARP緩存清除
        
        // 步驟2:執(zhí)行ping驗(yàn)證
        ProcessStartInfo pingPsi = new ProcessStartInfo
        {
            FileName = "ping.exe",
            Arguments = $"-n 1 {targetIP}",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        };
        
        using (Process pingProcess = Process.Start(pingPsi))
        {
            string output = pingProcess.StandardOutput.ReadToEnd();
            pingProcess.WaitForExit();
            
            // 檢查ping是否成功(Reply from 或 bytes=)
            return output.Contains("Reply from") || output.Contains("bytes=");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error: {ex.Message}");
        return false;
    }
}

方案2:使用NetworkInterface檢測(cè)WiFi狀態(tài)(更可靠)

/// <summary>
/// 檢測(cè)WiFi是否真正連接(比ping更可靠)
/// </summary>
public static bool IsWiFiConnected()
{
    try
    {
        NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
        
        foreach (NetworkInterface ni in interfaces)
        {
            // 檢查是否為WiFi網(wǎng)卡
            if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 &&
                ni.OperationalStatus == OperationalStatus.Up)
            {
                // 關(guān)鍵:檢查 OperationalStatus
                // Up = 連接正常
                // Down = 連接斷開
                
                IPInterfaceProperties ipProps = ni.GetIPProperties();
                
                // 額外檢查:是否有有效的IP地址
                bool hasValidIP = ipProps.UnicastAddresses
                    .Any(x => x.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork &&
                              !IPAddress.IsLoopback(x.Address) &&
                              x.Address.ToString() != "0.0.0.0");
                
                if (hasValidIP)
                {
                    Console.WriteLine($"WiFi已連接: {ni.Name}");
                    Console.WriteLine($"狀態(tài): {ni.OperationalStatus}");
                    return true;
                }
            }
        }
        
        Console.WriteLine("WiFi未連接");
        return false;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error: {ex.Message}");
        return false;
    }
}

方案3:通過WMI檢測(cè)WiFi連接狀態(tài)(最準(zhǔn)確)

using System.Management;

/// <summary>
/// 通過WMI檢測(cè)WiFi實(shí)際連接狀態(tài)
/// </summary>
public static bool IsWiFiReallyConnected()
{
    try
    {
        // 查詢網(wǎng)絡(luò)適配器狀態(tài)
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(
            "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=true"
        );
        
        foreach (ManagementObject mo in searcher.Get())
        {
            string description = mo["Description"]?.ToString() ?? "";
            
            if (description.Contains("Wireless") || description.Contains("WiFi"))
            {
                // 檢查IP配置是否有效
                object[] ipAddresses = mo["IPAddress"] as object[];
                object[] subnetMasks = mo["IPSubnet"] as object[];
                object[] gateways = mo["DefaultIPGateway"] as object[];
                
                if (ipAddresses != null && ipAddresses.Length > 0 &&
                    gateways != null && gateways.Length > 0)
                {
                    // 再查詢網(wǎng)絡(luò)適配器的物理狀態(tài)
                    ManagementObjectSearcher adapterSearcher = new ManagementObjectSearcher(
                        $"SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID='{mo["Description"]}'"
                    );
                    
                    foreach (ManagementObject adapter in adapterSearcher.Get())
                    {
                        // NetEnabled = true 表示真正連接
                        bool isEnabled = (bool)adapter["NetEnabled"];
                        
                        if (isEnabled)
                        {
                            Console.WriteLine($"WiFi真正已連接 (NetEnabled=true)");
                            return true;
                        }
                    }
                }
            }
        }
        
        Console.WriteLine("WiFi未連接");
        return false;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error: {ex.Message}");
        return false;
    }
}

方案4:檢測(cè)WiFi的SSID(最直接)

using System.Net.NetworkInformation;
using System.Diagnostics;

/// <summary>
/// 獲取當(dāng)前連接的WiFi SSID(最直接的方式)
/// </summary>
public static string GetConnectedWiFiSSID()
{
    try
    {
        ProcessStartInfo psi = new ProcessStartInfo
        {
            FileName = "netsh",
            Arguments = "wlan show interfaces",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        };
        
        using (Process process = Process.Start(psi))
        {
            string output = process.StandardOutput.ReadToEnd();
            process.WaitForExit();
            
            // 解析輸出,查找 "SSID"
            string[] lines = output.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
            foreach (string line in lines)
            {
                if (line.Contains("SSID"))
                {
                    // 提取SSID值
                    string[] parts = line.Split(':');
                    if (parts.Length > 1)
                    {
                        string ssid = parts[1].Trim();
                        if (!string.IsNullOrEmpty(ssid) && ssid != "Not associated")
                        {
                            Console.WriteLine($"當(dāng)前連接WiFi: {ssid}");
                            return ssid;
                        }
                    }
                }
            }
        }
        
        Console.WriteLine("未連接WiFi");
        return null;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error: {ex.Message}");
        return null;
    }
}

對(duì)比總結(jié)

檢測(cè)方法可靠性速度說明
ping? 低ARP緩存影響,不可靠
NetworkInterface??? 高檢查OperationalStatus,較可靠
WMI查詢???? 很高檢查NetEnabled標(biāo)志,最準(zhǔn)確
獲取SSID????? 最高直接查詢連接的熱點(diǎn)名稱,最直接

使用建議

// 完整的WiFi連接檢測(cè)流程
public static bool CheckWiFiConnection()
{
    // 第一步:檢查網(wǎng)絡(luò)接口狀態(tài)(快速)
    if (!IsWiFiConnected())
        return false;
    
    // 第二步:獲取SSID確認(rèn)(直接)
    string ssid = GetConnectedWiFiSSID();
    if (string.IsNullOrEmpty(ssid))
        return false;
    
    // 第三步:獲取網(wǎng)關(guān)IP
    string gatewayIP = GetWiFiGatewayIP();
    Console.WriteLine($"連接的WiFi: {ssid}");
    Console.WriteLine($"網(wǎng)關(guān)IP: {gatewayIP}");
    
    return true;
}

推薦用方案2或方案4,不要單純依賴ping命令。

到此這篇關(guān)于C# WIFI連接狀態(tài)檢測(cè)的幾種方法小結(jié)的文章就介紹到這了,更多相關(guān)C# WIFI連接狀態(tài)檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • gridview的buttonfield獲取該行的索引值(實(shí)例講解)

    gridview的buttonfield獲取該行的索引值(實(shí)例講解)

    本篇文章主要介紹了gridview的buttonfield獲取該行的索引值(實(shí)例講解)需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-01-01
  • C#正則表達(dá)式匹配與替換字符串功能示例

    C#正則表達(dá)式匹配與替換字符串功能示例

    這篇文章主要介紹了C#正則表達(dá)式匹配與替換字符串功能,結(jié)合具體實(shí)例形式分析了C#字符串正則替換相關(guān)類、方法的使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-06-06
  • C# byte轉(zhuǎn)為有符號(hào)整數(shù)實(shí)例

    C# byte轉(zhuǎn)為有符號(hào)整數(shù)實(shí)例

    這篇文章主要介紹了C# byte轉(zhuǎn)為有符號(hào)整數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • C#之set與get方法的用法案例

    C#之set與get方法的用法案例

    這篇文章主要介紹了C#之set與get方法的用法案例,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • WPF+SkiaSharp實(shí)現(xiàn)自繪彈幕效果

    WPF+SkiaSharp實(shí)現(xiàn)自繪彈幕效果

    這篇文章主要為大家詳細(xì)介紹了如何利用WPF和SkiaSharp實(shí)現(xiàn)自制彈幕效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2022-09-09
  • c#系列 list詳情

    c#系列 list詳情

    這篇文章主要介紹了c#系列 list,list 本質(zhì)是一個(gè)數(shù)組,。就跟我們操作系統(tǒng)一樣,提前申請(qǐng)內(nèi)存大小。所以我們程序一般都有一個(gè)申請(qǐng)內(nèi)存,實(shí)際使用內(nèi)存,內(nèi)存碎片這幾個(gè)概念,下面?zhèn)z看文章詳細(xì)內(nèi)容吧
    2021-10-10
  • c#實(shí)現(xiàn)獲取字符串陣列中元素最長(zhǎng)或最短的長(zhǎng)度

    c#實(shí)現(xiàn)獲取字符串陣列中元素最長(zhǎng)或最短的長(zhǎng)度

    下面小編就為大家分享一篇c#實(shí)現(xiàn)獲取字符串陣列中元素最長(zhǎng)或最短的長(zhǎng)度方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-12-12
  • C#借助Free?Spire.PDF?for?.NET實(shí)現(xiàn)輕松提取PDF文本

    C#借助Free?Spire.PDF?for?.NET實(shí)現(xiàn)輕松提取PDF文本

    在日常辦公和開發(fā)中,從 PDF 文件中提取文本是一項(xiàng)高頻需求,本文將介紹如何使用免費(fèi)庫 Free Spire.PDF for .NET 輕松實(shí)現(xiàn) PDF 文本提取,感興趣的小伙伴可以了解下
    2026-03-03
  • C#運(yùn)行時(shí)相互關(guān)系淺析

    C#運(yùn)行時(shí)相互關(guān)系淺析

    這篇文章介紹了C#運(yùn)行時(shí)相互關(guān)系,包括運(yùn)行時(shí)類型、對(duì)象、線程棧和托管堆之間的相互關(guān)系,靜態(tài)方法、實(shí)例方法和虛方法的區(qū)別等等。
    2015-10-10
  • C#串口通信模塊使用方法示例

    C#串口通信模塊使用方法示例

    這篇文章主要介紹了C#串口通信模塊使用方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論

京山县| 抚顺县| 荥阳市| 凤翔县| 调兵山市| 静安区| 开江县| 永平县| 额济纳旗| 中西区| 甘谷县| 阿克陶县| 增城市| 溆浦县| 邢台县| 乐陵市| 泰州市| 郴州市| 共和县| 江西省| 兴安县| 莫力| 双牌县| 乌兰县| 富川| 齐河县| 唐海县| 壶关县| 绥棱县| 宁武县| 隆安县| 德庆县| 阳谷县| 海城市| 马关县| 文昌市| 寿阳县| 建德市| 页游| 汉川市| 镇原县|