引言

在一些电商类或者引流类的网站中经常会有获取用户地理位置信息的需求,下面我分享一个用纯真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. java第三方类库实现图片等比缩放

    public class ThumbnailTest { public static void main(String[] args) { InputStream is = null; try { / ...

  2. Android判断Service是否运行

    /**         * 用来判断服务是否运行.         * @param context         * @param className 判断的服务名字         * @ret ...

  3. SQL的3个主要组成

    SQL语言包含3个部分:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL) 数据定义语言(DDL) 数据定义语言用于定义和管理对象,例如数据库.数据表及视图等.典型代表有CREAT ...

  4. c++ 命令模式(command)

    命令模式的有点: 1.能够容易地设计一个命令队列: 2.在需要的情况下,可以比较容易地将命令记入日志. 3.可以容易的实现对请求的撤销和重做. 4.由于加进新的具体命令类不影响其他的类,因此增加新的具 ...

  5. 40 Questions to test your skill in Python for Data Science

    Comes from: https://www.analyticsvidhya.com/blog/2017/05/questions-python-for-data-science/ Python i ...

  6. 快速搭建Wordpress

    1. 下载:ZentaoPMS作为Mysql Apach Php的基础环境: 2. 下载:Wordpress安装包: 3. 将Wordpress解压,放置于ZentaoPMS的Xampp的htdocs ...

  7. C++继承后的函数访问权限

    今天在写代码时发现对继承后的函数访问权限不太清楚,于是自己做了个测试: 1.头文件(test.h) 1 #include <iostream>  2 using namespace std ...

  8. 设计模式(java)--中介者模式之同事的关联

    转自:http://blog.csdn.net/zhengzhb/article/details/7430098 定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使 ...

  9. Excel2016通过宏生成拼音码

    一:视图---->宏---->录制宏 二:试图---->宏---->查看宏 三:点击编辑,输入如下代码片段,点击保存,并选择是 Function pinyin(p As Str ...

  10. [GO]文件的读写

    首先写一个文件 package main import ( "os" "fmt" ) func WriteFile(path string) { //打开文件, ...