引言

在一些电商类或者引流类的网站中经常会有获取用户地理位置信息的需求,下面我分享一个用纯真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. UNITY中使用不安全代码的相关设置

    必须执行以下三个步骤 1,在工程属性中设置:属性-生成-允许不安全代码 2,在Assets目录下增加 smcs.rsp(若打包设置中使用了.net 2.0 subset)或 gmcs.rsp(若打包设 ...

  2. Squid 代理服务器日志管理

    简介: Squid 服务器日志增长是很快的,如果不做处理的话,可以会由于系统限制单文件大小,而导致 Squid 服务停止,太大的日志文件也不适合分析. 一.日志配置 shell > grep ' ...

  3. Javascript 键盘事件

    window.document.onkeydown = function (e) { var evt = window.event || e;//兼容性处理 var keycode = evt.key ...

  4. CodeFirst(反射+特性)

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...

  5. Ubuntu 安装 kamailio

    首先安装前,你已经对kamailio的基本用法了解.可根据情况选择安装方式,本次安装基于Ubuntu18.04系统安装,对于16.04及一下会遇到版本问题,请自己查阅文档解决 安装第三方库 sudo ...

  6. Elasticsearch-PHP 处理JSON数组和对象

    PHP中处理JSON数组和对象 客户端有一些混淆的资源是围绕着JSON的数组和对象,以及如何在PHP中指定它们.特别是,问题是由空对象和空数组导致的.这篇文章回告诉你一些在Elasticsearch ...

  7. 用django框架开发一个B2C购物网站用户注册知识点总结2

    一:用户部分: 用户注册: 用户注册序列化器: import re from django_redis import get_redis_connection from rest_framework ...

  8. java 修改文件

    public void fileAlter(String fileName,String content) throws IOException{                 BufferedRe ...

  9. fedora 16 yum yuan

    暑假买了几本Linux的书一直放在书架上没看,周末闲着没事就拿起本<LinuxC从入门到精通>看了起来,初学Linux首先要做的便是在电脑上安装Linux系统.于是按书上的要求下载了Fed ...

  10. 将中国标准时间转成yyyy-MM-dd

    public static void main(String[] args) throws ParseException { String s = "Tue Jul 12 00:00:00 ...