Home Full Site
네트워크 연결 체크하기

C#에서 네트워크이 연결되어 있는지 체크하기 위해서는 NetworkInterface 클래스 (System.Net.NetworkInformation 네임스페이스)에 있는 GetIsNetworkAvailable() 메서드를 호출하면 된다. 이 메서드는 네트워크가 연결되어 있으면 true를 리턴하는데, 여기서의 네트워크 연결은 로컬 네트워크로만 연결된 경우도 포함한다. 즉, 인터넷으로 연결되진 않았지만, 로컬 네트워크 상에만 있는 경우도 네트워크가연결되었다고 판단한다.

예제

// using System.Net.NetworkInformation;
bool connected = NetworkInterface.GetIsNetworkAvailable();



네트워크 연결 상태 체크하기

네트워크가 종종 끊기는 경우 네트워크 상태를 체크할 필요가 있다. 네트워크 체크는 NetworkChange 클래스 (System.Net.NetworkInformation 네임스페이스)의 NetworkAvailabilityChanged 이벤트를 사용하여 모니터링 할 수 있는데, 이 이벤트의 이벤트핸들러에 전달되는 NetworkAvailabilityEventArgs 파라미터의 IsAvailable 속성을 체크하면 네트워크가 다운되었는지, 다시 돌아왔는지를 체크할 수 있다.

예제

// using System.Net.NetworkInformation;
// ne = NetworkAvailabilityEventArgs 파라미터
NetworkChange.NetworkAvailabilityChanged += (s, ne) =>
{
    if (ne.IsAvailable)
    {
        Debug.WriteLine("Network이 돌아옴");
    }
    else
    {
        Debug.WriteLine("Network이 다운됨");
    }
};



인터넷 연결 체크하기

위의 [네트워크 연결 체크하기]에서 사용된 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;
}



Public IP 체크

자신의 컴퓨터의 인터넷 상의 주소 즉 Public IP 를 알아내기 위해서는 통상 http://whatismyip.com 과 같은 웹사이트를 방문하면 된다. 만약 C# 에서 프로그래밍 방식으로 Public IP를 얻기 위해서는 checkip.dyndns.org 와 같이 IP 주소만을 간단하게 리턴하는 사이트를 방문해서 결과를 파싱하는 방식을 사용한다. 아래 예제는 이러한 사이트를 방문해서 Public IP를 얻는 예제이다.

예제

// Public IP 주소 구하기
WebClient wc = new WebClient();
string result = wc.DownloadString("http://checkip.dyndns.org");
string ip = result.Split(':')[1].Split('<')[0].Trim();

Console.WriteLine(ip);



© csharpstudy.com