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地址
您可能感兴趣
- 阿里云ssl证书ip地址(阿里云申请云盾免费SSL证书https)
- python编写小程序实现密码验证(python实现扫描ip地址的小程序)
- python获取网关ip地址(python实现扫描局域网指定网段ip的方法)
- 阿里云ecs 获取公网ip(阿里云ECS云服务器未添加安全组规则设置导致通过公网IP地址不能访问)
- sqlserver2012tcpip配置(Sql Server2012 使用IP地址登录服务器的配置图文教程)
- 更改docker容器的ip地址(docker容器通过ping直接运行获取公网IP操作)
- C#如何获取真实IP地址
- SQLServer设置客户端使用IP地址登录的图文详解(SQLServer设置客户端使用IP地址登录的图文详解)
- IIS7如何限制某个IP地址访问网站
- 宝塔如何通过ip访问网站(宝塔面板如何禁止“服务器IP地址”打开网站?)
- vmware虚拟linux无法配置ip(在VMware虚拟机中查看Linux的IP地址的方法)
- docker ip地址分配(docker添加网桥并设置ip地址范围操作)
- 蓝底证件照怎么制作 证件照换底色 换尺寸快速搞定(蓝底证件照怎么制作)
- 你喜欢足球吗 足球如何点亮世界的(足球如何点亮世界的)
- 不可分鸽是什么梗(不可分鸽是什么梗)
- 古代的鸽子是爱情的象征,并非和平的使者(古代的鸽子是爱情的象征)
- 一课译词 放鸽子(一课译词放鸽子)
- 终于来了,淘宝更改账户名测试中,快去看看你能不能修改(淘宝更改账户名测试中)
热门推荐
- jquery解析xml
- python实现螺旋矩阵(Python3实现的旋转矩阵图像算法示例)
- sqlserver分表后如何查询(SQL Server中row_number分页查询的用法详解)
- mysql拆分字符串(MySQL 字符串拆分操作含分隔符的字符串截取)
- sqlserver 锁表原因(SQL Server学习笔记之事务、锁定、阻塞、死锁用法详解)
- blazor客户端访问串口(Blazor Server 应用程序中进行 HTTP 请求)
- dockerpull的镜像位置(解决docker pull镜像报错的问题)
- 云服务器和虚拟空间有什么区别(云服务器、虚拟机是一样的吗?有什么不同?)
- js 原生事件代理(如何利用原生JS实现触摸滑动监听事件)
- HttpServerUtility类的常用方法
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9