• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ASP.NET实现根据IP获取省市地址的方法

    本文实例讲述了ASP.NET实现根据IP获取省市地址的方法,分享给大家供大家参考。具体实现方法如下:

    1、在网站的跟路径下面添加QQWry.dat(点击此处本站下载https://www.jb51.net/softs/10529.html)文件,这个文件是IP数据库文件

    2、添加以下一个类 IPScanner

    复制代码 代码如下:
    public class IPScanner
    {
            //私有成员#region 私有成员
            private string dataPath;
            private string ip;
            private string country;
            private string local;

            private long firstStartIp = 0;
            private long lastStartIp = 0;
            private FileStream objfs = null;
            private long startIp = 0;
            private long endIp = 0;
            private int countryFlag = 0;
            private long endIpOff = 0;
            private string errMsg = null;


            //构造函数#region 构造函数
            public IPScanner()
            {
                this.dataPath = System.Web.HttpContext.Current.Server.MapPath("/ipdata/QQWry.dat");
            }

            //公共属性#region 公共属性
            public string DataPath
            {
                set { dataPath = value; }
            }
            public string IP
            {
                set { ip = value; }
            }
            public string Country
            {
                get { return country; }
            }
            public string Local
            {
                get { return local; }
            }
            public string ErrMsg
            {
                get { return errMsg; }
            }

            //搜索匹配数据#region 搜索匹配数据
            private int QQwry()
            {
                string pattern = @"(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))";
                Regex objRe = new Regex(pattern);
                Match objMa = objRe.Match(ip);
                if (!objMa.Success)
                {
                    this.errMsg = "IP格式错误";
                    return 4;
                }

                long ip_Int = this.IpToInt(ip);
                int nRet = 0;
                if (ip_Int >= IpToInt("127.0.0.0") ip_Int = IpToInt("127.255.255.255"))
                {
                    this.country = "本机内部环回地址";
                    this.local = "";
                    nRet = 1;
                }
                else if ((ip_Int >= IpToInt("0.0.0.0") ip_Int = IpToInt("2.255.255.255")) || (ip_Int >= IpToInt("64.0.0.0") ip_Int = IpToInt("126.255.255.255")) || (ip_Int >= IpToInt("58.0.0.0") ip_Int = IpToInt("60.255.255.255")))
                {
                    this.country = "网络保留地址";
                    this.local = "";
                    nRet = 1;
                }
                objfs = new FileStream(this.dataPath, FileMode.Open, FileAccess.Read);
                try
                {
                    objfs.Position = 0;
                    byte[] buff = new Byte[8];
                    objfs.Read(buff, 0, 8);
                    firstStartIp = buff[0] + buff[1] * 256 + buff[2] * 256 * 256 + buff[3] * 256 * 256 * 256;
                    lastStartIp = buff[4] * 1 + buff[5] * 256 + buff[6] * 256 * 256 + buff[7] * 256 * 256 * 256;
                    long recordCount = Convert.ToInt64((lastStartIp - firstStartIp) / 7.0);
                    if (recordCount = 1)
                    {
                        country = "FileDataError";
                        objfs.Close();
                        return 2;
                    }
                    long rangE = recordCount;
                    long rangB = 0;
                    long recNO = 0;
                    while (rangB rangE - 1)
                    {
                        recNO = (rangE + rangB) /2;
                        this.GetStartIp(recNO);
                        if (ip_Int ==this.startIp)
                        {
                            rangB = recNO;
                            break;
                        }if (ip_Int >this.startIp)
                            rangB = recNO;
                        else
                            rangE = recNO;
                    }this.GetStartIp(rangB);
                    this.GetEndIp();
                    if (this.startIp = ip_Int this.endIp >= ip_Int)
                    {
                        this.GetCountry();
                        this.local =this.local.Replace("(我们一定要解放台湾!!!)", "");
                    }else{
                        nRet =3;
                        this.country ="未知";
                        this.local ="";
                    }
                    objfs.Close();
                    return nRet;
                }catch{
                    return1;
                }
            }// IP地址转换成Int数据#region IP地址转换成Int数据 privatelong IpToInt(string ip)
            {
                char[] dot =newchar[] { '.' };
                string[] ipArr = ip.Split(dot);
                if (ipArr.Length ==3)
                    ip = ip +".0";
                ipArr = ip.Split(dot);

                long ip_Int =0;
                long p1 =long.Parse(ipArr[0]) *256*256*256;
                long p2 =long.Parse(ipArr[1]) *256*256;
                long p3 =long.Parse(ipArr[2]) *256;
                long p4 =long.Parse(ipArr[3]);
                ip_Int = p1 + p2 + p3 + p4;
                return ip_Int;
            }//获取起始IP范围#region 获取起始IP范围 privatelong GetStartIp(long recNO)
            {
                long offSet = firstStartIp + recNO *7;
                //objfs.Seek(offSet,SeekOrigin.Begin);             objfs.Position = offSet;
                byte[] buff =new Byte[7];
                objfs.Read(buff, 0, 7);

                endIpOff = Convert.ToInt64(buff[4].ToString()) + Convert.ToInt64(buff[5].ToString()) *256+ Convert.ToInt64(buff[6].ToString()) *256*256;
                startIp = Convert.ToInt64(buff[0].ToString()) + Convert.ToInt64(buff[1].ToString()) *256+ Convert.ToInt64(buff[2].ToString()) *256*256+ Convert.ToInt64(buff[3].ToString()) *256*256*256;
                return startIp;
            }// 获取结束IP#region 获取结束IP privatelong GetEndIp()
            {
                //objfs.Seek(endIpOff,SeekOrigin.Begin);             objfs.Position = endIpOff;
                byte[] buff =new Byte[5];
                objfs.Read(buff, 0, 5);
                this.endIp = Convert.ToInt64(buff[0].ToString()) + Convert.ToInt64(buff[1].ToString()) *256+ Convert.ToInt64(buff[2].ToString()) *256*256+ Convert.ToInt64(buff[3].ToString()) *256*256*256;
                this.countryFlag = buff[4];
                returnthis.endIp;
            }//获取国家/区域偏移量#region 获取国家/区域偏移量 privatestring GetCountry()
            {
                switch (this.countryFlag)
                {
                    case1:
                    case2:
                        this.country = GetFlagStr(this.endIpOff +4);
                        this.local = (1==this.countryFlag) ?"" : this.GetFlagStr(this.endIpOff +8);
                        break;
                    default:
                        this.country =this.GetFlagStr(this.endIpOff +4);
                        this.local =this.GetFlagStr(objfs.Position);
                        break;
                }return"";
            }//获取国家/区域字符串#region 获取国家/区域字符串 privatestring GetFlagStr(long offSet)
            {
                int flag =0;
                byte[] buff =new Byte[3];
                while (1==1)
                {
                    objfs.Position = offSet;
                    flag = objfs.ReadByte();
                    if (flag ==1|| flag ==2)
                    {
                        objfs.Read(buff, 0, 3);
                        if (flag ==2)
                        {
                            this.countryFlag =2;
                            this.endIpOff = offSet -4;
                        }
                        offSet = Convert.ToInt64(buff[0].ToString()) + Convert.ToInt64(buff[1].ToString()) *256+ Convert.ToInt64(buff[2].ToString()) *256*256;
                    }else{
                        break;
                    }
                }if (offSet 12)
                    return"";
                objfs.Position = offSet;
                return GetStr();
            }//GetStr#region GetStr privatestring GetStr()
            {
                byte lowC =0;
                byte upC =0;
                string str ="";
                byte[] buff =newbyte[2];
                while (1==1)
                {
                    lowC = (Byte)objfs.ReadByte();
                    if (lowC ==0)
                        break;
                    if (lowC >127)
                    {
                        upC = (byte)objfs.ReadByte();
                        buff[0] = lowC;
                        buff[1] = upC;
                        System.Text.Encoding enc = System.Text.Encoding.GetEncoding("GB2312");
                        str += enc.GetString(buff);
                    }else{
                        str += (char)lowC;
                    }
                }return str;
            }publicstring IPLocation(string ip)
            {
                this.ip = ip;
                this.QQwry();
                if (this.country.Trim().Contains(this.local.Trim()))
                    returnthis.country.Trim();
                returnthis.country.Trim() +this.local.Trim();
            }
    }

    3、ASP.NET根据IP获取省市地址的调用

    复制代码 代码如下:
    string ip="123.81.176.99";
    IPScanner ipscaner = new IPScanner();
    ipscaner.IPLocation(ip); 
    string strIPAddress=ipscaner.Country;

    希望本文所述对大家的C#程序设计有所帮助。

    您可能感兴趣的文章:
    • Asp.net获取客户端IP常见代码存在的伪造IP问题探讨
    • ASP.NET获取真正的客户端IP地址的6种方法
    • asp.net获取真实ip的方法
    • asp.net获取URL和IP地址的方法汇总
    • asp.net(vb.net)获取真实IP的函数
    • asp.net Javascript获取CheckBoxList的value
    • asp.net 获取IP的相关资料
    • JavaScript asp.net 获取当前超链接中的文本
    • ASP.NET 获取客户端IP方法
    上一篇:ASP.NET MVC中的AJAX应用
    下一篇:.Net判断一个对象是否为数值类型实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    ASP.NET实现根据IP获取省市地址的方法 ASP.NET,实现,根据,获取,省市,