ASP.NET根据IP获取省市地址
类别:编程学习 浏览量:1863
时间:2014-10-19 ASP.NET根据IP获取省市地址
ASP.NET根据IP获取省市地址
1、在网站的跟路径下面添加 QQWry.dat 文件,这个文件是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
{
return 1;
}
}
// IP地址转换成Int数据#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 =
标签:Ip地址
您可能感兴趣
- python获取网关ip地址(python实现扫描局域网指定网段ip的方法)
- 宝塔如何通过ip访问网站(宝塔面板如何禁止“服务器IP地址”打开网站?)
- docker ip地址分配(docker添加网桥并设置ip地址范围操作)
- 阿里云ssl证书ip地址(阿里云申请云盾免费SSL证书https)
- C#如何获取真实IP地址
- python编写小程序实现密码验证(python实现扫描ip地址的小程序)
- vmware虚拟linux无法配置ip(在VMware虚拟机中查看Linux的IP地址的方法)
- 阿里云ecs 获取公网ip(阿里云ECS云服务器未添加安全组规则设置导致通过公网IP地址不能访问)
- sqlserver2012tcpip配置(Sql Server2012 使用IP地址登录服务器的配置图文教程)
- SQLServer设置客户端使用IP地址登录的图文详解(SQLServer设置客户端使用IP地址登录的图文详解)
- 更改docker容器的ip地址(docker容器通过ping直接运行获取公网IP操作)
- IIS7如何限制某个IP地址访问网站
- 做网红真的很能赚钱吗(做网红真的很能赚钱吗)
- 10句英语常用(英语常用900句)
- 爱情能当饭吃吗(爱情能当饭吃吗说说)
- 白T恤穿法(白t恤)
- 你怎么忘了是说先爱我(你怎么忘了如何爱我)
- 做技术难吗(技术难不难)
热门推荐
- windows10hyper-v怎么关闭(windows10下关闭Hyper-V服的几种方法)
- python分割字符串要用哪一个语句(python使用threading.Condition交替打印两个字符)
- python外部如何调嵌套函数(python中嵌套函数的实操步骤)
- serv-u设置文件夹权限(serv_U 域离线 解决方法)
- 卷积神经网络python实现(Python通过TensorFlow卷积神经网络实现猫狗识别)
- laravel如何设置默认模块(laravel-admin 中列表筛选方法)
- python3编程过程(Python3模拟登录操作实例分析)
- vue3中的setup的参数(Vue3中ref与reactive的详解与扩展)
- laravel数据库管理教程(Laravel基础_关于view共享数据的示例讲解)
- 微信html5页面怎么制作(HTML5中外部浏览器唤起微信分享功能的代码)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9