.NET记录-获取外网IP以及判断该IP是属于网通还是电信

时间:2023-03-08 21:29:50
.NET记录-获取外网IP以及判断该IP是属于网通还是电信
在工作时,需要获取服务器公网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 = "";
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 = "";
}
}
}
}
}
catch
{
location = "";
}
return location;
}

因为加班太多,工作任务紧张,所以欠考虑,没有在获取数据之后自己存储,后面遇到502,导致网站异常。

  • 因为获取的外网IP和方位都依赖于外部网站,所以需要考虑,当访问量过大时,ip138为防止服务器瘫痪,将会禁止访问。
  • 建议获取外网IP和方位之后,将外网IP和方位存储,可借助数据库、Redis、MemCache,甚至在服务器写入txt文件,来存储获取的外网IP和方位。