221.232.142.130 221.232.142.130 湖北省武汉市 网友沙龙网吧(湖北大学/学院路)
221.232.142.131 221.232.142.133 湖北省武汉市 电信ADSL
221.232.142.134 221.232.142.134 湖北省武汉市 星空网吧(湖大旁)
221.232.142.135 221.232.143.25  湖北省武汉市 电信ADSL
221.232.143.26  221.232.143.26  湖北省武汉市 星网吧金鹤园店
221.232.143.27  221.232.143.29  湖北省武汉市 电信ADSL
221.232.143.30  221.232.143.30  湖北省武汉市青山区 余家头星网吧(博园店)
221.232.143.31  221.232.143.41  湖北省武汉市 电信ADSL
221.232.143.42  221.232.143.42  湖北省武汉市 瑞翔网吧
221.232.143.43  221.232.144.5   湖北省武汉市 电信ADSL
221.232.144.6   221.232.144.6   湖北省武汉市 阅马场博大网吧
221.232.144.7   221.232.144.8   湖北省武汉市 电信ADSL
221.232.144.9   221.232.144.9   湖北省武汉市武昌区 解放路航海网吧
221.232.144.10  221.232.144.10  湖北省武汉市武昌区 紫阳路星网吧(银线店)
221.232.144.11  221.232.144.13  湖北省武汉市 电信ADSL
221.232.144.14  221.232.144.14  湖北省武汉市 中青网络家园(阅马厂旗舰店)
221.232.144.15  221.232.145.1   湖北省武汉市 电信ADSL
221.232.145.2   221.232.145.2   湖北省武汉市武昌区 星网吧网游店(华科武昌分校)
221.232.145.3   221.232.145.5   湖北省武汉市 电信ADSL
221.232.145.6   221.232.145.6   湖北省武汉市 星网吧南湖店
221.232.145.7   221.232.145.9   湖北省武汉市 电信ADSL
221.232.145.10  221.232.145.10  湖北省武汉市 星网吧通惠店(华科武昌分校)
221.232.145.11  221.232.145.13  湖北省武汉市 电信ADSL
221.232.145.14  221.232.145.14  湖北省武汉市 样样红(飞鼠)网吧(华科武昌分校后门)
221.232.145.15  221.232.145.29  湖北省武汉市 电信ADSL
221.232.145.30  221.232.145.30  湖北省武汉市 中青网络家园晨翔店(华科武昌分校门口)
我手上有一个IP地址的数据库,现在有一个IP地址221.232.145.20,该怎么用这个IP地址取得“湖北省武汉市 电信ADSL
”这个地址。

解决方案 »

  1.   

    调用web服务
    【IP地址来源搜索 WEB 服务(是目前最完整的IP地址数据)】http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx 
      

  2.   

    .net的就试过,我贴点代码给你看看,用的是qq纯真数据库qqwry.dat,通过计算ip来去得到后面的信息,如果不想用流的方式的话可以将qqwry.dat转换成accsss数据库,
    下面是代码 using System; 
     using System.IO; 
     using System.Collections; 
     using System.Text; 
     using System.Text.RegularExpressions; /// <summary>
    /// ExportData 的摘要说明。
    /// </summary>
    public class IPScaner
    {
            #region 私有成员
            private string dataPath;
            private string ip;
            private string country;
            private string local;
            public string sever = "未知";        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;
            #endregion 
      
             #region 构造函数 
            public IPScaner()            

                     // 
                     // TODO: 在此处添加构造函数逻辑 
                     // 
                 } 
             #endregion 
      
             #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;} 
              } 
              #endregion #region 导出数据
    public void SaveToText(string toFilePath,string fromFilePath)
    {
    objfs = new FileStream(fromFilePath, FileMode.Open, FileAccess.Read);
    objfs.Position=0;
    byte[] buff1 = new Byte[8] ;
    objfs.Read(buff1,0,8);
    int firstStartIp=buff1[0]+buff1[1]*256+buff1[2]*256*256+buff1[3]*256*256*256;
    int lastStartIp=buff1[4]*1+buff1[5]*256+buff1[6]*256*256+buff1[7]*256*256*256;
    long recordCount=Convert.ToInt64((lastStartIp-firstStartIp)/7.0);
    if(recordCount<=1)
    {
    country="FileDataError";
    objfs.Close();
    }
    long rangE=recordCount;
    StreamWriter writer=File.AppendText(toFilePath);
    for(int i=0;i<=recordCount;i++)
    {
    long offSet = firstStartIp+i*7;
    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;
        
    objfs.Position=endIpOff;
    byte [] buff3 = new Byte[5];
    objfs.Read(buff3,0,5);
    this.endIp=Convert.ToInt64(buff3[0].ToString())+Convert.ToInt64(buff3[1].ToString())*256+Convert.ToInt64(buff3[2].ToString())*256*256+Convert.ToInt64(buff3[3].ToString())*256*256*256;
    this.countryFlag=buff3[4];
    string showIP=this.IntToIP(startIp);
    this.GetCountry();
    writer.WriteLine(showIP+" "+this.country+this.local);
    }
    writer.Close(); }
    #endregion
      

  3.   


    #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.Seek(0,SeekOrigin.Begin); 
                          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; 
                     } 
      
                 }
    #endregion #region 获取起始IP范围 
                 private long 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; 
                 } 
             #endregion 
      
             #region 获取结束IP 
                 private long 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]; 
                     return this.endIp; 
                 } 
              #endregion 
    #region 获取IP地址 
                 public string IPLocation() 
                 

                     this.QQwry(); 
                     return this.country; 
                 } 
             public string IPLocation(string dataPath,string ip) 
             

                 this.dataPath=dataPath; 
                 this.ip=ip; 
                 this.QQwry(); 
                 return  this.country; 
             } 
             #endregion 
    #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=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; 
                 } 
             #endregion #region int转换成IP
    private string IntToIP(long ip_Int)
    {
    long seg1=(ip_Int&0xff000000)>>24;
    if(seg1<0)
    seg1+=0x100;
    long seg2=(ip_Int&0x00ff0000)>>16;
    if(seg2<0)
    seg2+=0x100;
    long seg3=(ip_Int&0x0000ff00)>>8;
    if(seg3<0)
    seg3+=0x100;
    long seg4=(ip_Int&0x000000ff);
    if(seg4<0)
    seg4+=0x100;
    string ip=seg1.ToString()+"."+seg2.ToString()+"."+seg3.ToString()+"."+seg4.ToString(); return ip;
    }
    #endregion
      
    #region 获取国家/区域偏移量
    private string GetCountry()
    {
    switch(this.countryFlag)
    {
    case 1:
    case 2:
    this.country=GetFlagStr(this.endIpOff+4);
    this.local=( 1 == this.countryFlag )?" ":this.GetFlagStr(this.endIpOff+8);
                    //    this.sever = GetFlagStr(this.endIpOff);
                        this.sever = this.local;
    break;
    default:
    this.country=this.GetFlagStr(this.endIpOff+4);
    this.local=this.GetFlagStr(objfs.Position);
                        this.sever = this.local;
    break;
    }
    return " ";
    }
    #endregion #region 获取国家/区域字符串
    private string GetFlagStr(long offSet)
    {
    int flag=0;
    byte [] buff = new Byte[3];
    while(1==1)
    {
    //objfs.Seek(offSet,SeekOrigin.Begin);
    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();
    }
    #endregion #region GetStr
    private string GetStr()
    {
    byte lowC=0;
    byte upC=0;
    string str="";
    byte[] buff = new byte[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;

    #endregion
    }