获得ip地址以后,如何取得该ip地址的信息呢?是通过ip库对照呢,还是有其他的办法,如果是ip库,请提供一个,谢谢!
环境,winform和asp。net页面
环境,winform和asp。net页面
解决方案 »
- 本地运行没错,发布到IIS提示找不到.CS文件
- 存储过程执行无数据 无报错
- 请问一个正则的问题
- eWebEditor在线编辑器,页面显示出现“未能找到路径‘D:\。。。。menuconfig\default.config’的一部分”,求高手解救。
- 学完了C#该如何继续ASP。NET
- 显示数据的问题(简单)
- 200分求解:datalist分页问题
- 百分求一方法:将字符串内<>(包括<>,且必须是成对出现的)内的数据删除.急!!!
- 怎样在ASP.NET中调用一个应用程序
- javascript在treeview中的使用
- dropdownlist如何分级显示数据----十分火急
- 生成下面的模块时,启用了优化或没有调试信息
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
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;
}
}
}