引言

在一些电商类或者引流类的网站中经常会有获取用户地理位置信息的需求,下面我分享一个用纯真IP库获取用户地理位置信息的方案。

正文

第一步:本文的方案是基于纯真IP库的,所以首先要去下载最新的纯真IP数据库;名称一般是QQWry.Dat

 
第二步:通过Http请求拿到访问者的IP

/// <summary>
/// 静态构造 设置IP位置
/// </summary>
static IPAgent()
{
if (HttpContext.Current != null)
file = HttpContext.Current.Server.MapPath("~/Bin/QQWry.Dat");
}

/// <summary>
/// 客户端IP
/// </summary>
public static string IP
{
get
{
if (HttpContext.Current == null) return "0.0.0.0"; // 非Web程序不获取IP
string ip = string.IsNullOrEmpty(HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]) ? HttpContext.Current.Request.UserHostAddress : HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (ip.IndexOf(':') != -1) ip = ip.Substring(0, ip.IndexOf(':'));
if (ip.Contains(",")) ip = ip.Substring(0, ip.IndexOf(','));
if (!regex.IsMatch(ip)) ip = "127.0.0.1"; //不正确的IP可能是ipV6
return ip;
}
}

 
第三步:通过IP获取当前IP的地理位置信息

private static byte[] data;
private static long firstStartIpOffset, lastStartIpOffset, ipCount;
private static Regex regex = new Regex(@"(((\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]))");

/// <summary>
/// IP数据库的位置
/// </summary>
private static string file;

/// <summary>
///
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static string GetAddress(string ip)
{
if (string.IsNullOrEmpty(file)) return "";
Location loc = GetLocation(ip);
return loc.Area + loc.Detail;
}

/// <summary>
///
/// </summary>
/// <returns></returns>
public static string GetAddress()
{
return GetAddress(IP);
}

/// <summary>
/// 根据IP获取对应的地理位置信息
/// </summary>
/// <param name="ip"></param>
/// <param name="province"></param>
/// <param name="city"></param>
/// <returns></returns>
public static string GetAddress(string ip, out string province, out string city)
{
Location loc = GetLocation(ip);
province = loc.Province;
city = loc.City;
return loc.Area + loc.Detail;
}

有需要源码的请加QQ群@我单独发你。

PS:扫描下方二维码或点击链接,加入QQ群

使用纯真IP库获取用户端地理位置信息的更多相关文章

  1. Java使用纯真IP库获取IP对应省份和城市

    原文:http://blog.csdn.net/chwshuang/article/details/78027873?locationNum=10&fps=1 Java使用纯真IP库获取IP对 ...

  2. 使用navigator.geolocation来获取用户的地理位置信息

    使用navigator.geolocation来获取用户的地理位置信息 W3C 中新添加了一个名为 Geolocation的 API 规范,Geoloaction API的作用就是通过浏览器获取用户的 ...

  3. php利用淘宝IP库获取用户ip地理位置

    我们查ip的时候都是利用ip138查询的,不过那个有时候是不准确的,还不如自己引用淘宝的ip库来查询,这样准确度还高一些.不多说了,介绍一下淘宝IP地址库的使用. 淘宝IP地址库 淘宝公布了他们的IP ...

  4. 如何获取用户的地理位置-浏览器地理位置(Geolocation)API 简介

    如何获取用户的地理位置-浏览器地理位置(Geolocation)API 简介 一.总结 一句话总结:Geolocation API(地理位置应用程序接口)提供了一个可以准确知道浏览器用户当前位置的方法 ...

  5. ASP.NET获取用户端的真实IP

    ASP.NET获取用户端的真实IP在各种场景都能用到,但是用户网端变幻莫测情况众多,获取真实IP还真是不容易啊.下面分享个比较好一点的方法: 获取IP初始版本 /// <summary> ...

  6. lib-qqwry v1.0 发布 nodejs解析纯真IP库(qqwry.dat)

    lib-qqwry是当初学习node时用来练手的一个模块,用来解析纯真IP库的 现在发一个v1.0版本弥补我当时稚嫩的代码. 意外收获是,整理代码后发现,相比v0.x版本 急速模式下的效率提升大概20 ...

  7. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  8. qqwry - 纯真ip库的golang服务

    qqwry 纯真 IP 库的一个服务.通过http提供一个ip地址归属地查询支持 软件介绍 我们大家做网站的时候,都会需要将用户的IP地址转换为归属地址功能,而之前的作法大都是从硬盘的数据文件中读取, ...

  9. js获取用户实时地理位置

    js获取用户实时地理位置 if(navigator.geolocation) { var id = navigator.geolocation.watchPosition(function(posit ...

随机推荐

  1. Unresolved external 'AlphaBlend' referenced from

    AlphaBlend [Linker Error] Unresolved external 'AlphaBlend' referenced from 解决方案 把文件msimg32.lib添加到工程中 ...

  2. 获取用户的相关请求信息, 以及包括请求头 request.environ

    #在index文件中 1. print(type(request)) #看出所属库 2. from django.core.handlers.wsgi import WSGIRequest #查看WS ...

  3. web.xml执行顺序

    出自:http://blog.csdn.net/u010833154/article/details/50697987 引言:启动java web程序的时候,java web会读取配置文件web.xm ...

  4. spring maven项目解决依赖jar包版本冲突方案

    引入:http://blog.csdn.net/sanzhongguren/article/details/71191290 在spring reference中提到一个解决spring jar包之间 ...

  5. MySQL 执行 'use databases;' 时很慢

    问题描述: 就是这么个情况,登录数据库切换库时感觉很卡,需要等待几秒钟. 案例: shell > mysql -uroot -ppassword mysql> use databases; ...

  6. shell编程——变量子串的常用操作

    ${#字符串} 返回字符串的长度 [root@localhost ~]# a=length [root@localhost ~]# echo ${#a} 6 ${字符串:位置x} 从位置x开始往后截取 ...

  7. spring与mybatis

  8. 前端开发之JavaScript基础篇一

    主要内容: 1.JavaScript介绍 2.JavaScript的引入方法和输出及注释 3.javaScript变量和命名规则 4.五种基本数据类型 5.运算符 6.字符串处理 7.数据类型转换   ...

  9. Excel VBA入门(三) 流程控制1-条件选择

    VBA中的流程控制分为两种,其一是条件结构式的,即根据条件判断的结果去选择性执行相应的语句(块):另一种是循环,即循环地执行语句(块).本节介绍第一种. 1. IF if 语句其实包含有几种形式: ① ...

  10. VUE+WebPack游戏设计:欲望都市,构建类RPG游戏的开发