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
”这个地址。
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
”这个地址。
解决方案 »
- Spring在应用程序中,如何初始化spring容器后不要关闭,始终运行。
- struts1验证框架能否实现部分验证
- 急!请高手帮忙解答
- webservice 问题
- axis2部署的几种方法
- 一个电信项目中遇到的问题,请高人出来指招,谢谢!!
- 千分散尽还复来之散分贴一
- 第一次来这里,请教问题 The Network Adapter could not establish the conn
- 高分请教用过log4j的朋友,一直找不到相关的资料,请高手指教!
- 请问那里有tomcat5。0以上的下载?
- strtus2中Action的返回结果使用redirectAction时出现的问题
- 深圳12月份好不好找工作?
【IP地址来源搜索 WEB 服务(是目前最完整的IP地址数据)】http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx
下面是代码 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
#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
}