获得ip地址以后,如何取得该ip地址的信息呢?是通过ip库对照呢,还是有其他的办法,如果是ip库,请提供一个,谢谢!
环境,winform和asp。net页面

解决方案 »

  1.   

    using System;
    using System.IO;
    using System.Collections.Generic;
    using System.Text;
    using System.Text.RegularExpressions;
    namespace ShowIP
    {
        class IPReader
        {
             static private string _dataPath = "./QQWry.Dat"; 
             static private string country; 
             static private string local;   
             static private long firstStartIp=0; 
             static private long lastStartIp=0; 
             static private FileStream objfs = null; 
             static private long startIp=0; 
             static private long endIp=0; 
             static private int countryFlag=0; 
             static private long endIpOff=0; 
      
             #region 搜索匹配数据 
                 static private int QQwry(string ip) 
                 { 
                     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) 
                     { 
                         return 4; 
                     } 
      
                     long ip_Int = IpToInt(ip); 
                     int nRet=0; 
                     if(ip_Int>=IpToInt("127.0.0.0")&&ip_Int<=IpToInt("127.255.255.255")) 
                     { 
                         country="本机内部环回地址"; 
                         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"))) 
                     { 
                         country="网络保留地址"; 
                         local=""; 
                         nRet=1; 
                     }                   
                     try 
                     {
                         objfs = new FileStream(_dataPath, FileMode.Open, FileAccess.Read);
                         //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; 
                             GetStartIp(recNO); 
                             if(ip_Int==startIp) 
                             { 
                                 rangB = recNO; 
                                 break; 
                             } 
                             if(ip_Int>startIp) 
                                 rangB=recNO; 
                             else 
                                 rangE=recNO; 
                         } 
                         GetStartIp(rangB); 
                         GetEndIp(); 
                         if(startIp<=ip_Int&&endIp>=ip_Int) 
                         { 
                             GetCountry(); 
                             local=local.Replace("(我们一定要解放台湾!!!)",""); 
                         } 
                         else 
                         { 
                             nRet=3; 
                             country="未知"; 
                             local=""; 
                         } 
                         objfs.Close(); 
                         return nRet; 
                     } 
                     catch 
                     { 
                         return 1; 
                     } 
      
                 } 
             #endregion 
      
             #region IP地址转换成Int数据 
                 static private long IpToInt(string ip) 
                 { 
                     string[] ipArr = ip.Split('.');
                     if (ipArr.Length == 3)
                         ip = ip + ".0";
                     ipArr = ip.Split('.');
      
                     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 
                 static 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 获取起始IP范围 
                 static 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 
                 static private long GetEndIp() 
                 { 
                     //objfs.Seek(endIpOff,SeekOrigin.Begin); 
                     objfs.Position=endIpOff; 
                     byte [] buff = new Byte[5]; 
                     objfs.Read(buff,0,5); 
                     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; 
                     countryFlag=buff[4]; 
                     return endIp; 
                 } 
             #endregion 
      
      

  2.   

    #region 获取国家/区域偏移量 
                      static private string GetCountry() 
                      { 
                          switch(countryFlag) 
                          { 
                              case 1:
                              case 2:
                                  country = GetFlagStr(endIpOff + 4);
                                  local=( 1 == countryFlag )?" ":GetFlagStr(endIpOff+8); 
                                  break; 
                              default: 
                                  country=GetFlagStr(endIpOff+4); 
                                  local=GetFlagStr(objfs.Position); 
                                  break; 
                          } 
                          return " "; 
                      } 
             #endregion 
      
             #region 获取国家/区域字符串 
                      static 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) 
                                  { 
                                      countryFlag=2; 
                                      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 
                 static 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          /// <summary>
            /// 通过IP查找地理位置
            /// </summary>
            /// <param name="ip">ip地址</param>
            /// <returns>地理位置</returns>
            static public string FindIP(string ip)
            {
                QQwry(ip.Trim());
                return country +" "+ local;
            }
        }
    }
      

  3.   

    纯真的IP库式可以导出成Txt文本形式的。下载的压缩包里面有一个查询IP的程序(ShowIP.exe),里面有一个“解压”的按钮,点这个就可以了。如果吧 “解压” 换成“导出”该多好呀,
      

  4.   

    到http://www.cz88.net/ 下载一个最新的IP库就可以了。自带了一个查询IP的程序(ShowIP.exe)。这个程序的作用是——把IP库转换成Txt格式。ShowIP.exe里的“解压”的按钮来实现。
      

  5.   

    用纯真库+Red_angelX(当你手淫你会想起谁)的代码