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