1、在网站的跟路径下面添加 QQWry.dat 文件,这个文件是IP数据库文件

2、添加以下一个类 IPScanner

 
 
C# 代码   复制

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); 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;
}//获取起始IP范围#region 获取起始IP范围 privatelong 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;
}// 获取结束IP#region 获取结束IP privatelong GetEndIp()
{
//objfs.Seek(endIpOff,SeekOrigin.Begin); objfs.Position = endIpOff;
byte[] buff =new Byte[5];
objfs.Read(buff, 0, 5);
this.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;
this.countryFlag = buff[4];
returnthis.endIp;
}//获取国家/区域偏移量#region 获取国家/区域偏移量 privatestring GetCountry()
{
switch (this.countryFlag)
{
case1:
case2:
this.country = GetFlagStr(this.endIpOff +4);
this.local = (1==this.countryFlag) ?"" : this.GetFlagStr(this.endIpOff +8);
break;
default:
this.country =this.GetFlagStr(this.endIpOff +4);
this.local =this.GetFlagStr(objfs.Position);
break;
}return"";
}//获取国家/区域字符串#region 获取国家/区域字符串 privatestring GetFlagStr(long offSet)
{
int flag =0;
byte[] buff =new Byte[3];
while (1==1)
{
objfs.Position = offSet;
flag = objfs.ReadByte();
if (flag ==1|| flag ==2)
{
objfs.Read(buff, 0, 3);
if (flag ==2)
{
this.countryFlag =2;
this.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();
}//GetStr#region GetStr privatestring GetStr()
{
byte lowC =0;
byte upC =0;
string str ="";
byte[] buff =newbyte[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;
}publicstring IPLocation(string ip)
{
this.ip = ip;
this.QQwry();
if (this.country.Trim().Contains(this.local.Trim()))
returnthis.country.Trim();
returnthis.country.Trim() +this.local.Trim();
} }

3、ASP.NET根据IP获取省市地址的调用

 
 
C# 代码   复制

string ip="123.81.176.99";
IPScanner ipscaner = new IPScanner();
ipscaner.IPLocation(ip);
string strIPAddress=ipscaner.Country;

ASP.NET根据IP获取省市地址的更多相关文章

  1. C# 根据IP获取省市

    /// <summary> /// 根据IP获取省市 /// </summary> public void GetAddressByIp() { string ip = &qu ...

  2. 根据IP获取省市 .

    public class IPAddress { /// <summary> /// 得到真实IP以及所在地详细信息(Porschev) /// </summary> /// ...

  3. 通过IP获取MAC地址例子(应用层)

    博客地址:http://home.cnblogs.com/u/zengjianrong/ 由于某种需求,需要获取某个ip的mac地址,在应用层实现例子如下代码. 流程:1. 先遍历arp表,若存在对应 ...

  4. java根据本地Ip获取mac地址

    import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; impo ...

  5. c#根据ip获取城市地址

    用的API是百度.新浪.淘宝: 1.首先是一个检测获取的值是不是中文的方法,因为有的ip只能识别出来某省,而城市名称则为空返回的json里会出现null或undefined. public stati ...

  6. 通过IP获取MAC地址例子(内核层)

    博客地址:http://home.cnblogs.com/u/zengjianrong/ 在内核处理此流程,反而更加简单些,代码如下: #include <net/arp.h> #incl ...

  7. ASP.NET MVC中获取URL地址参数的两种写法

    一.url地址传参的第一种写法 1.通过mvc中默认的url地址书写格式:控制器/方法名/参数 2.实例:http://localhost:39270/RequestDemo/Index/88,默认参 ...

  8. android获取Mac地址和IP地址

    获取Mac地址实际项目中测试了如下几种方法:(1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac地址,这种方法也是网络上使用的最多的方法) //根据Wifi信 ...

  9. 百度地图api根据用户IP获取用户位置(PHP)

    1.百度地图开放平台找的你的ak ,链接:http://lbsyun.baidu.com/apiconsole/key 2.获取用户ip地址(外网ip 服务器上可以获取用户外网Ip 本机ip地址只能获 ...

随机推荐

  1. charles抓取移动端app数据

    pc端为mac 移动端为android pc端 1.下载charles并安装 安利一个超好的良心网站(好多好用的软件都可以在上面找到,并且免费): http://xclient.info/search ...

  2. 转 理解vuex -- vue的状态管理模式

    转自:https://segmentfault.com/a/1190000012015742 vuex是什么? 先引用vuex官网的话: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 ...

  3. PAT 甲级 1010 Radix

    https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536 Given a pair of positi ...

  4. 通过loadrunner将http返回response写入文本txt中

    脚本如下 Action() { int myFile;//lr不支持FILE类型,所以定义一个int类型的file web_reg_save_param("goods_price" ...

  5. centos 升级内核(编译安装)

    yum install -y wget gcc gc bc gd make perl ncurses-devel xz下载地址:https://www.kernel.org#tar -Jxvf lin ...

  6. 触发Full GC执行的情况 以及其它补充信息

    除直接调用System.gc外,触发Full GC执行的情况有如下四种.1. 旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然不足 ...

  7. 【刷题】洛谷 P3613 睡觉困难综合征

    题目背景 刚立完Flag我就挂了WC和THUWC... 时间限制0.5s,空间限制128MB 因为Claris大佬帮助一周目由乃通过了Deus的题,所以一周目的由乃前往二周目世界找雪辉去了 由于二周目 ...

  8. 用Python实现的数据结构与算法:基本搜索

    一.顺序搜索 顺序搜索 是最简单直观的搜索方法:从列表开头到末尾,逐个比较待搜索项与列表中的项,直到找到目标项(搜索成功)或者 超出搜索范围 (搜索失败). 根据列表中的项是否按顺序排列,可以将列表分 ...

  9. 遇到问题---java---安装新版本jdk后Failed reading value of registry key

    情况 情况是原本安装有jdk1.7,能正常运行,现在要升级到1.8. 直接在oracle的网站下载1.8安装后修改配置为1.8后: 能用javac编译成功,但java命令运行时报错: Failed r ...

  10. 响应式开发(二)-----Bootstrap框架的介绍

    简介 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架,是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的, ...