1、在网站的跟路径下面添加QQWry.dat(点击此处本站下载https://www.jb51.net/softs/10529.html)文件,这个文件是IP数据库文件
2、添加以下一个类 IPScanner
复制代码 代码如下:
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{
return1;
}
}// IP地址转换成Int数据#region IP地址转换成Int数据 privatelong IpToInt(string ip)
{
char[] dot =newchar[] { '.' };
string[] ipArr = ip.Split(dot);
if (ipArr.Length ==3)
ip = ip +".0";
ipArr = ip.Split(dot);