首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

急怎么根据ip地址取得所在城市的信息

2011-12-10 
急!如何根据ip地址取得所在城市的信息?获得ip地址以后,如何取得该ip地址的信息呢?是通过ip库对照呢,还是有

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

[解决办法]
帮你顶
[解决办法]
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



[解决办法]
纯真的IP库式可以导出成Txt文本形式的。

下载的压缩包里面有一个查询IP的程序(ShowIP.exe),里面有一个“解压”的按钮,点这个就可以了。

如果吧 “解压” 换成“导出”该多好呀,
[解决办法]
去网上下个ip地址库.

[解决办法]
用纯真库+Red_angelX(当你手淫你会想起谁)的代码

热点排行