zoukankan      html  css  js  c++  java
  • 使用纯真IP库获取用户端地理位置信息

    引言

    在一些电商类或者引流类的网站中经常会有获取用户地理位置信息的需求,下面我分享一个用纯真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})|(1d{2})|(2[0-4]d)|(25[0-5])).){3}((d{1,2})|(1d{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群

    一群用代码改变世界的

  • 相关阅读:
    h.264宏块与子宏块类型
    h.264语法结构分析
    [傅里叶变换及其应用学习笔记] 关于任何信号都能表现成傅里叶级数形式的推导
    [傅里叶变换及其应用学习笔记] 课程概览
    [傅里叶变换及其应用学习笔记] 三十. 拉东变换
    [傅里叶变换及其应用学习笔记] 二十九. 高维Ш函数修改版
    后端解决 微信H5支付 商户参数格式错误 方法
    PhpStorm一次性折叠所有函数或者方法
    js生成的cookie在yii2中获取不到的解决办法
    Android webview 调起H5微信支付
  • 原文地址:https://www.cnblogs.com/ydcnblog/p/9260431.html
Copyright © 2011-2022 走看看