ASP.NET根据IP获取省市地址

ASP.NET根据IP获取省市地址

1、在网站的跟路径下面添加 QQWry.dat 文件,这个文件是IP数据库文件

2、添加以下一个类 IPScanner

  •  
  •  
  • C# 代码   复制
  • 
     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
                {
                    return 1;
                }
            }
    
            // IP地址转换成Int数据#region IP地址转换成Int数据 
            private long IpToInt(string ip)
            {
                char[] dot = new char[] { '.' };
                string[] ipArr = ip.Split(dot);
                if (ipArr.Length == 3)
                    ip = ip + ".0";
                ipArr = ip.Split(dot);
    
                long ip_Int =标签: