IT_Expert/dotNET | Posted by 낫기법필 2011. 6. 8. 09:28

c#] IP주소 가져오기

[쥔장]======================
이런 내용은 책을 봐도 나오는 내용이고 msdn을 봐도 나오는 내용이지만 귀찮아서 검색하여 스크랩해놓음
============================

using System.Net;
using System.Net.Sockets;

public string Get_MyIP() {
    IPHostEntry host = Dns.GetHostByName(Dns.GetHostName());
    string myip = host.AddressList[0].ToString();
    return myip;
}

위의 내용이 기본임.
당연히 IP주소는 네트웍상의 주소이기 때문에 System.Net 관련한 것들을 사용을 해야 할 것이다.
하지만 .NET FrameWork 2.0 이상에서는 비권장하는 내용이란다.
게다가 Vista 부터는 IP v6 이라는 개념의 주소가 추가가 되었기 때문에 IP v6 주소로 나온단다.
하여 이를 개선을 한 내용이 아래와 같다.

public static string Client_IP {
    get{
        IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
        string ClientIP = string.Empty;

        for (int i = 0; i < host.AddressList.Length; i++) {
            if (host.AddressList[i].AddressFamily == AddressFamily.InterNetwork) {
                ClientIP = host.AddressList[i].ToString();
            }
        }

        return ClientIP;
    }
}

여기서의 포인트가 if문의 조건인 AddressFamily.InterNetwork 이다.
이를 통해서 IP v4 우리가 흔히 쓰는 형태의 IP주소를 가져올 수 있는 것이다.


좀 더 찾아보니 공유기를 사용했을 때가 문제가 되는 부분이 있었다.
이를 체크하여 실질적인 주소를 가져오는 방법이 있기는 한데, IP주소를 알려주는 사이트를 이용한 방법인데 이 방법을 권장하기는 그렇지만 메인이 되지 않으면 될 것 같다. 해당 사이트에서 출력해주는 형태가 변경이 되거나 사이트의 문제라도 생겨버리면 알수가 없다...
        // 외부아이피 알려주는 사이트에서 문자열 가져오기
        String WanIP = new WebClient().DownloadString("http://www.whatismyip.com/automation/n09230945.asp");
        Console.WriteLine("IP Address : {0} ", WanIP);




[참고] http://bluene.net/blog/547, http://kindtis.tistory.com/68