728x90

내가 사용하는 IP주소를 알아내기 위한 코드이다.

단순하게 IP주소를 알아내는 코드를 사용하면 사설IP주소(공유기 또는 방화벽내에서 사설 IP)를 사용하는 곳에서는 실제 인터넷에 접속된 IP주소와 다를 수가 있다.

공인 IP주소를 확인하기 위해서 파싱 방식으로 처리하였다.


using System.Net;
using System.IO;
using System.Text.RegularExpressions;


private void button1_Click(object sender, EventArgs e)
{
    if (GetRealIP().Equals(GetFirstIPv4()))
    {
        MessageBox.Show("Your IP Address : " + GetRealIP());
    }
    else   //
    {
        MessageBox.Show("Your Public IP Address : " + GetRealIP() + Environment.NewLine + "Your Private IP Address : " + GetFirstIPv4());
    }
}

public static string GetRealIP()
{
    string url = "http://checkip.dyndns.org";  //
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";

    string resResult = string.Empty;
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        StreamReader readerPost = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8, true);
        resResult = readerPost.ReadToEnd();
    }
    //MessageBox.Show(resResult);  //
    string realip = Parsing(Parsing(resResult, "Current IP Address:")[1], "</body>")[0].Trim();
    //MessageBox.Show(temp);  // 파싱한 이후의 메시지 확인
    return realip;
}

public static string[] Parsing(string _body, string _parseString)
{
    // 엑셀 VBA 에서 사용하는 Split 함수처럼 파싱을 쉽게 사용 가능하게 해줌
    // 만든이 : http://blog.naver.com/bobojisu
    return System.Text.RegularExpressions.Regex.Split(_body, _parseString);
}

public string GetFirstIPv4()
{
    Regex regex = new Regex(@"^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$");
    foreach (System.Net.IPAddress ip in System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList)
    {
        if (regex.IsMatch(ip.ToString()))
        {
            return ip.ToString();
        }
    }
    return null;
}


공인(Public) IP 주소 가져오는 속도가 느려서 다른 사이트를 참조해서 작업을 했더니 Parinsing 함수쪽에서 에러가 발생한다. 그래서 다른 방법으로 해결을 했다.


public static string GetRealIP()
{
    string url = "http://www.findip.kr/";
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";

    string resResult = string.Empty;
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        StreamReader readerPost = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8, true);
        resResult = readerPost.ReadToEnd();
    }

    if (resResult.IndexOf("내 아이피 주소(My IP Address) :") > 0)
    {
        int ingNO = resResult.IndexOf("내 아이피 주소(My IP Address) :");
        string varTemp = resResult.Substring(ingNO, 50);
        string realip = Parsing(Parsing(varTemp, "내 아이피 주소(My IP Address) :", 1), "</h1>", 0).Trim();
        return realip;
    }
    return null;
}

public static string Parsing(string _body, string _parseString, int no)
{
    // 엑셀 VBA 에서 사용하는 Split 함수
    string varTemp = _body.Split(new string[] { _parseString }, StringSplitOptions.None)[no];
    return varTemp;
}





'C# > 기능 활용' 카테고리의 다른 글

C# 프로그램 사용기한 체크  (0) 2015.10.23
C# Get Mac Address  (0) 2015.10.12
C# 인코딩  (0) 2015.09.24
문자열 암호화 - RSA, MD5, DES  (0) 2015.08.07
C# OS 버전 및 플랫폼 확인 방법  (0) 2015.08.06
블로그 이미지

Link2Me

,