c#獲取外網IP


 

在網上搜了好幾個用來獲取外網IP的URL,在應用中也用了,但是過了一段時間發現,其中一個失效了,可能是請求的過多,用的人太多了吧。

今天找了一個來之“站長之家”的:

很簡單的一個方法,直接看代碼吧:

public static string getExternalIp()
        {
            try
            {
                WebClient client = new WebClient();
                client.Encoding = System.Text.Encoding.Default;
                //string response = client.DownloadString("http://1212.ip138.com/ic.asp");//失效了
                //string response = client.DownloadString("http://icanhazip.com/");//可用,可能不穩定
                string response = client.DownloadString("http://ip.chinaz.com/");//站長之家
                string myReg = @"<dd class=""fz24"">([\s\S]+?)<\/dd>";
                Match mc = Regex.Match(response, myReg, RegexOptions.Singleline);
                if (mc.Success && mc.Groups.Count > 1)
                {
                    response = mc.Groups[1].Value;
                    return response;
                }
                else
                {
                    return "Can't get you Ip address!";
                }
            }
            catch(Exception)
            {
                return "Can't get you Ip address!";
            }
               
        }

這里需要注意一點的就是里面的正則,不熟悉,查了半天。我們在頁面中根據class的名字來正則匹配出來IP地址:

我們看這個網址:http://ip.chinaz.com/

 

 

我們要獲取的就是紅框中的IP地址:使用正則匹配:

string myReg = @"<dd class=""fz24"">([\s\S]+?)<\/dd>";
                Match mc = Regex.Match(response, myReg, RegexOptions.Singleline);
                if (mc.Success && mc.Groups.Count > 1)
                {
                    response = mc.Groups[1].Value;
                    return response;
                }

注意:@的作用就是輸出“\”這種特殊字符時不需要轉義。

   \s表示匹配任意空字符,\S表示匹配任意不是空白符的字符。等價於 [^ \f\n\r\t\v]。

     +表示匹配前面的子表達式一次或多次。

     ?表示匹配前面的子表達式零次或一次。

   +?一起表示重復1次或更多次,但盡可能少重復。與上面一樣,只是至少要重復1次。

           最后才突然發現:站長之家提供查詢外網IP的接口:http://ip.chinaz.com/getip.aspx

關於C#正則詳細請移步:http://www.jb51.net/article/360.htm

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM