using System;
using System.Net.NetworkInformation;
using System.Threading.Tasks;
public class NetworkChecker
{
    // 国内广泛可访问的公共DNS服务器
    private static readonly string[] dnsServers = new string[]
    {
        "223.5.5.5",           // 阿里云DNS - 覆盖多运营商
        "223.6.6.6",           // 阿里云DNS备用
        "119.29.29.29",        // 腾讯DNS - 覆盖多运营商
        "180.76.76.76",        // 百度DNS - 覆盖多运营商
        "1.2.4.8",             // 中国互联网信息中心DNS
        "8.8.8.8"              // Google DNS (国内部分地区可用)
    };
    /// <summary>
    /// 检查是否可以连通外网
    /// </summary>
    /// <param name="timeoutMs">超时时间(毫秒),默认2秒</param>
    /// <returns>true表示可以连通外网,false表示不能</returns>
    public static async Task<bool> CanConnectToInternet(int timeoutMs = 2000)
    {
        try
        {
            var pingTasks = new Task<PingReply>[dnsServers.Length];
            
            // 并行ping所有DNS服务器
            for (int i = 0; i < dnsServers.Length; i++)
            {
                pingTasks[i] = PingAsync(dnsServers[i], timeoutMs);
            }
            // 等待任意一个ping任务成功完成
            var completedTask = await Task.WhenAny(pingTasks);
            var result = await completedTask;
            
            return result.Status == IPStatus.Success;
        }
        catch
        {
            return false;
        }
    }
    private static async Task<PingReply> PingAsync(string address, int timeout)
    {
        using (var ping = new Ping())
        {
            return await ping.SendPingAsync(address, timeout);
        }
    }
}