.NET记录-获取外网IP以及判断该IP是属于网通还是电信
2016-05-16 15:32
477 查看
在工作时,需要获取服务器公网IP(外网IP),并且判断该IP地址是属于网通还是电信。花时间整理一下,自己实现的代码,以及后续遇到的问题。
/// <summary> /// 获取外网IP /// </summary> /// <returns>IP</returns> public static string GetOuterIP() { string IP = string.Empty; Uri uri = new Uri("http://www.ip138.com/ips138.asp"); System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri); req.Method = "get"; using (System.IO.Stream s = req.GetResponse().GetResponseStream()) { using (System.IO.StreamReader reader = new System.IO.StreamReader(s)) { char[] ch = { '[', ']' }; string str = reader.ReadToEnd(); System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(str, @"\[(?<IP>[0-9\.]*)\]"); IP= m.Value.Trim(ch); } } return IP; }
/// <summary> /// 判断ip是电信还是网通,网通为0,电信为1 /// </summary> /// <returns></returns> public static string GetLocation() { string location = "0"; try { Uri uri = new Uri("http://www.ip138.com/ips138.asp"); System.Net.HttpWebRequest req = System.Net.WebRequest.Create(uri) as System.Net.HttpWebRequest; if (req != null) { req.Method = "get"; using (System.IO.Stream s = req.GetResponse().GetResponseStream()) { using (System.IO.StreamReader reader = new System.IO.StreamReader(s, Encoding.GetEncoding("gb2312"))) { string str = reader.ReadToEnd(); if (str.Contains("电信")) { location = "1"; } } } } } catch { location = "0"; } return location; }
因为加班太多,工作任务紧张,所以欠考虑,没有在获取数据之后自己存储,后面遇到502,导致网站异常。
因为获取的外网IP和方位都依赖于外部网站,所以需要考虑,当访问量过大时,ip138为防止服务器瘫痪,将会禁止访问。
建议获取外网IP和方位之后,将外网IP和方位存储,可借助数据库、Redis、MemCache,甚至在服务器写入txt文件,来存储获取的外网IP和方位。
相关文章推荐
- 如何在 Linux/Windows/MacOS 上使用 .NET 进行开发
- 如何在 Linux 中安装微软的 .NET Core SDK
- C#.NET获取拨号连接的宽带连接方法
- C#.Net ArrayList的使用方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- .net(c#)中的new关键字详细介绍
- 由vbs sort引发.NET Framework之间的关系说明
- C#难点逐个击破(6):C#数据类型与.net framework数据类型
- .NET中的async和await关键字使用及Task异步调用实例
- 基于.NET平台常用的框架和开源程序整理
- .Net中的json操作类用法分析
- .net实现序列化与反序列化实例解析
- .NET中的Timer类型用法详解
- 关于.net(C#)中的跨进程访问的问题
- .NET实现父窗体关闭而不影响子窗体的方法
- 基于.Net中的数字与日期格式化规则助记词的使用详解
- .NET微信公众号开发之公众号消息处理
- .Net下的签名与混淆图文分析
- .NET 扩展实现代码
- .net实现网站用户登录认证