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

9 篇文章 0 订阅
在工作时,需要获取服务器公网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和方位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值