.Net/C# --- 根据Ip获取地址信息

根据城域网Ip获取当前Ip的地址位置信息。这里给大家介绍一种比较笨的方法,但是很实用。

一、在进行编写的时候要注意自己的.net 版本.net 6版本和.net core 都需要下载安装一个NetGet包和增加一行代码,我会在下面给大家指出来。

NetGet包是这个System.Text.Encoding.CodePages

 下载哪个版本看大家需要。

接下来开始写代码:

1、我们需要一个抓取网页信息的方法,因为我们调用的是ip查询 查ip 网站ip查询 同ip网站查询 iP反查域名 iP查域名 同ip域名的接口,所以我们要把这个页面里的包给他抓取下来。

        /// 
        /// 抓取网页查询信息
        /// 
        /// 
        /// 编码类型
        /// 
        public static string GetHtml(string url,string encoding)
        {
            string pagehtml = string.Empty;
            try
            {
                using (WebClient MyWebClient = new WebClient())
                {
                    //控制台应用和.net core 需要这一句,需要安装NetGet包System.Text.Encoding.CodePages
                    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
                    Encoding encode = Encoding.GetEncoding(encoding);
                    MyWebClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36");
                    MyWebClient.Credentials = CredentialCache.DefaultCredentials;
                    Byte[] pageData = MyWebClient.DownloadData(url);
                    pagehtml = encode.GetString(pageData);
                }
            }
            catch (Exception ex)
            {

                return "访问" + url + "失败,请检查网络配置";
            }
            return pagehtml;
        }

里面有一句是高版本用的,如果使用的是.net 6.0以下或者不是.net core 那就可以去掉那一句话。这个方法的形参第一个是路径链接,下面方法我会给大家写出来,第二个参数是编码格式。因为他这个编码格式是gb2312的,所以我们要规定一下。

2、我们要在这个方法里面获取我们想要的信息,同时也调用上面刚才的那个方法:

        /// 
        /// 根据Ip获取我们所要的信息
        /// 
        /// 
        /// 
        public static string GetstringIpAddress(string strIp)
        {
            string html = GetHtml("https://www.ip138.com/iplookup.asp?ip=" + strIp + "&action=2","gb2312");
            string pre = "var ip_result = {\"ASN归属地\":\"";
            int pos = html.IndexOf(pre);
            html = html.Substring(pos + pre.Length);
            html = html.Substring(0, html.IndexOf('"'));
            string[] res = html.Split(new char[] { '省', '市', ' ' }, StringSplitOptions.RemoveEmptyEntries);
            return res[1];
        }

这个里面要把我们所获取的信息给筛选出我们想要的,我这个方法里面只选择了城市的信息,它返回的数据里不只有城市信息,还有省份等之类的一些信息。大家如果需要的话,可以适量改改。非常简便修改res就行了

3、接下来我们只需要调用这个方法就可以实现根据城域网Ip获取当前城市名称。

GetstringIpAddress("180.212.208.47")

这样我们就成功获取到了城市的名称!!!我这里再说一边,他不止可以获取城市名称,还可以获取省份,运营商等信息,大家根据自己需要改变截取规则就行了!!!!

你可能感兴趣的:(.NET/C#,网络,c#,.net)