手把手教你实现显示IP归属地

简介: 近年来,根据《国家互联网用户账号名称信息管理规定》要求互联网用户账号服务平台标注IP地址属地信息,微信公众号、【昂焱数据】抖音、知乎各大平台纷纷都上线了IP归属地的功能。本文就带大家实现该功能,国内的用户精确到省份,国外用户精确到国家。

@TOC

近年来,根据《国家互联网用户账号名称信息管理规定》要求互联网用户账号服务平台标注IP地址属地信息,微信公众号、抖音、知乎各大平台纷纷都上线了IP归属地的功能。本文就带大家实现该功能,国内的用户精确到省份,国外用户精确到国家。

实现原理

那么如何根据IP地址查找到详细的归属地信息呢?
答案是:通过 自治系统(Autonomous System)。

互联网是由不同网络组成的网络,自治系统是组成 Internet 的大型网络,连接到 Internet 的每台计算机或设备都连接到一个 AS。而每一个自治系统都会有一个编码,我们称之为 ASN。
可以认为 AS 类似于一个城镇的邮局。

邮件从一个邮局到另一个邮局,直到到达正确的城镇为止,然后该城镇的邮局将在该城镇内传递邮件。每个 AS 都控制一组特定的 IP 地址,就像每个镇的邮局负责将邮件传递到该镇内的所有地址一样。

通常,每个 AS 由单个大型组织(例如 Internet 服务提供商(ISP)、大型企业技术公司、大学或政府机构)运营。

到这里,我们可以捋清楚这样一个逻辑关系:IP地址 -> 地址块 -> 自治网络编码(ASN) -> 组织 -> 国家。

通过 IP 地址,我们就可以定位到一个大致的地理位置,例如:北京朝阳区、深圳南山区等。例如我现在的 IP 地址就归属于编码为 AS4xxx 这个自治网络,通过这个 ASN 可以知道位置在中国深圳,这个 ASN 编码所属的组织为 中国电信。

但是,要实现这样一个查找功能,首先得要有一个IP地址归属地数据库。网上找了下,以前淘宝网有一个开源的接口API开源调用,但不知道为何,近一两年,该接口地址已经下线不能使用了。我们可以通过调用昂焱数据平台提供的IP地址归属地接口来实现此功能。
IP地址归属地查询主要针对当前实际运用最多的IPv4地址,根据IP地址查询其归属地。IP地址归属地查询适用于网络定位、网络跟踪、网络排查等相关场景。

获取IP地址

首先,需要获取客户端IP地址

获取IP地址方法:

/**
     * 获取IP地址
     *
     * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
     * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
     */
    public static String getIpAddr(HttpServletRequest request) {
        String ip = null;
        try {
            ip = request.getHeader("x-forwarded-for");
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP"); 
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
        } catch (Exception e) {
            logger.error("IPUtils ERROR ", e);
        }
        
        return ip; 
    }

调用IP归属地接口:

public class Test{

    // 请求的昂焱数据IP归属地接口地址
    public static final String URL = "https://www.ayshuju.com/data/ip/address";
    // 请求的密钥
    public static final String APPKEY = "请求的密钥";
    // 请求客户端
    public static OkHttpClient client = new OkHttpClient();

    public static void main(String[] args) throws IOException {

        RequestBody formBody = new FormBody.Builder()
                .add("appKey", APPKEY)
                .add("ip", "117.186.0.233")
                .build();

        // 执行post请求
        String result = doPostByFormData(URL, formBody);
        System.out.println(result);
    }

    /**
     * @param url url
     * @throws IOException
     */
    public static String doPostByFormData(String url, RequestBody body) throws IOException {

        Request request = new Request.Builder().url(url).post(body).build();

        try (Response response = client.newCall(request).execute()) {
            return response.body().string();
        }

    }
}
更多技术资源、软件开发工具,欢迎访问【[昂焱数据]】,这里一定有惊喜等着你!
目录
相关文章
|
20天前
|
网络协议 Ubuntu Linux
|
20天前
|
域名解析 网络协议 搜索推荐
阿里云DNS常见问题之获取不到用户真实IP地址如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
10月前
百度搜索:蓝易云【计算机网络】IP地址和子网掩码的关系】
IP地址和子网掩码是计算机网络中非常重要的概念,对于网络的配置和通信都有着重要的作用。
51 0
|
10月前
|
算法 JavaScript Apache
全网显示 IP 归属地,用上这个开源库,实现也太简单了
细心的小伙伴可能会发现,最近蘑菇新上线了 IP 属地的功能,小伙伴在发表动态、发表评论以及聊天的时候,都会显示自己的 IP 属地信息
249 0
|
数据库
zblog实现评论显示IP归属地方法
随着各大网络平台开放显示归属地,近期想弄一个zblog评论归属地的显示,更精准的是弄一个接口调用,然后存到数据库,但从稳定和加载方面出发,使用到了离线库查询IP的归属地,这里就使用到了李洋开发的IP归属地查询插件。离线IP库是纯真IP免费公开版,目前还算可以吧。
149 0
zblog实现评论显示IP归属地方法
|
PHP
WordPress实现评论显示IP归属地方法
想给WordPress博客留言加个评论IP属地功能,本教程之前也介绍过zblog评论IP归属地显示方法,本期教程教大家如何给添加WordPress评论IP归属地。
533 0
WordPress实现评论显示IP归属地方法
|
弹性计算 Cloud Native 关系型数据库
【笔记】用户指南—网络与连接—申请和释放外网地址
PolarDB-X实例会默认分配一个内网地址,应用和MySQL客户端可以在阿里云ECS上连接PolarDB-X实例的数据库。如果需要从外网访问PolarDB-X,则需要为PolarDB-X实例申请外网地址。本文将介绍如何申请和释放外网地址。
104 0
【笔记】用户指南—网络与连接—申请和释放外网地址
|
Java 开发者 微服务
主机 IP 信息提示|学习笔记
快速学习主机 IP 信息提示
81 0
|
存储 缓存 网络协议
IP地址归属地那些事
最近各大社交平台都悄悄上线了一个新功能,就是显示用户的IP归属地,境内精确到省级,境外精确到国家或地区。在个人信息和每条评论上面都有,也是炸出来了一波xx在xx国的账号,各大号主纷纷出视频解释自己的ip归属为什么在国内,有说用代理的,有说给家人登录的,也有说在国内有工作室(团队)的......
557 0
|
数据采集 Python
Python爬虫系列3-通过Ip地址定位目标所在区域
在现如今的互联网时代,我们越来越依赖网络,甚至网络已经融入了我们的日常生活,甚至没有办法想象如果没有了网络,会造成什么样的情景?。。。
Python爬虫系列3-通过Ip地址定位目标所在区域

热门文章

最新文章