인터넷 연결 체크하기

홈 > 공유팁! > 프로그램 관련 > C#
프로그램 관련

인터넷 연결 체크하기

꽁스짱 0 1205
위의 [네트워크 연결 체크하기]에서 사용된 GetIsNetworkAvailable() 메서드는 네트워크가 로컬 네트워크라도 연결되어 있으면 true를 리턴하는데, 많은 경우 개발자가 원하는 것은 머신이 인터넷에 연결되어 있는지를 체크하는 것이다. 인터넷에 연결되어 있고, 인터넷이 정상적으로 동작하는지를 체크하기 위해, 외부 유명 웹사이트를 접속해 보는 방식을 사용할 수 있다. 예를 들어, microsoft.com 혹은 google.com 등을 접속해 보고 만약 에러가 없으면 인터넷이 연결되어 있다고 판단하는 것이다.

마이크로소프트는 이러한 네트워크 체크를 위한 특별한 웹사이트를 만들었는데, Vista 이상의 윈도우즈 운영체제에서 실제 네트워크 체크를 위해 이 방식을 사용한다. NCSI (Network Connectivity Status Indicator)이라고 불리우는 이 기능은 HTTP GET 을 사용하여 www.msftncsi.com/ncsi.txt 을 가져올 수 있는지 체크하고, 또한 dns.msftncsi.com 이라는 호스트의 IP가 131.107.255.255 이 되는지 체크하게 된다. 아래 예제는 이러한 NCSI 방식을 사용하여 인터넷 연결 여부를 체크하는 코드이다.

 

예제

public bool IsInternetConnected()
{
    const string NCSI_TEST_URL = "http://www.msftncsi.com/ncsi.txt";
    const string NCSI_TEST_RESULT = "Microsoft NCSI";
    const string NCSI_DNS = "dns.msftncsi.com";
    const string NCSI_DNS_IP_ADDRESS = "131.107.255.255";

    try
    {
        // Check NCSI test link
        var webClient = new WebClient();
        string result = webClient.DownloadString(NCSI_TEST_URL);
        if (result != NCSI_TEST_RESULT)
        {
            return false;
        }

        // Check NCSI DNS IP
        var dnsHost = Dns.GetHostEntry(NCSI_DNS);
        if (dnsHost.AddressList.Count() < 0 || dnsHost.AddressList[0].ToString() != NCSI_DNS_IP_ADDRESS)
        {
            return false;
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex);
        return false;
    }

    return true;
}
 
0 Comments
제목