全网显示 IP 归属地,用上这个开源库,实现也太简单了

本文介绍了如何在Java中获取并显示用户的IP属地信息,主要利用ip2region库进行IP地址到地理位置的转换。文章详细讲述了获取IP地址的方法,ip2region库的特性以及三种查询算法,并提供了集成到项目中的步骤和测试示例。
摘要由CSDN通过智能技术生成

细心的小伙伴可能会发现,最近蘑菇新上线了 IP 属地的功能,小伙伴在发表动态、发表评论以及聊天的时候,都会显示自己的 IP 属地信息

 

动态显示IP属地

在蘑菇群聊中,也 可 以 展 示 IP 属 地,下面是小伙伴们在交流群中显示的

 

下面,我就来讲讲,Java 中是如何获取 IP 属地的,主要分为以下几步

  • 通过 HttpServletRequest 对象,获 取 用户的 IP 地址
  • 通过 IP 地址,获取对应的省份、城市

首先需要写一个 IP 获取的工具类,因为每一次用户的 Request 请 求,都会携带上请求的 IP 地 址放到请求头中。

public class IpUtil {    public static String getIpAddr(ServerHttpRequest request) {        HttpHeaders headers = request.getHeaders();        String ipAddress = headers.getFirst("X-Forwarded-For");        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {            ipAddress = headers.getFirst("Proxy-Client-IP");        }        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {            ipAddress = headers.getFirst("WL-Proxy-Client-IP");        }        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {            ipAddress = request.getRemoteAddress().getAddress().getHostAddress();            if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) {                // 根据网卡取本机配置的IP                try {                    InetAddress inet = InetAddress.getLocalHost();                    ipAddress = inet.getHostAddress();                } catch (UnknownHostException e) {                    log.error("根据网卡获取本机配置的IP异常", e);                }            }        }        // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割        if (ipAddress != null && ipAddress.indexOf(",") > 0) {            ipAddress = ipAddress.split(",")[0];        }        return ipAddress;    }}

这里有三个名词,分别是

  • X-Forwarded-For一个 HTTP 扩展头部,主要是为了让 Web 服务器获取访问用户的真 实 IP 地址。每个 IP 地址,每个值通过逗号+空格分开,最左边是最原始客户端的 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
全国IP地址,十分详细 范例。 province city isp start_ip1 end_ip1 福建省 电信 1.0.1.0 1.0.3.255 广东省 电信 1.0.8.0 1.0.15.255 广东省 电信 1.0.32.0 1.0.63.255 福建省 电信 1.1.0.0 1.1.0.255 福建省 电信 1.1.2.0 1.1.3.255 福建省 电信 1.1.4.0 1.1.7.255 广东省 电信 1.1.8.0 1.1.63.255 福建省 电信 1.2.0.0 1.2.1.255 北京市 (北龙中网科技有限公司) 网通 1.2.2.0 1.2.2.255 福建省 电信 1.2.4.0 1.2.7.255 广东省 电信 1.2.8.0 1.2.127.255 广东省 电信 1.3.0.0 1.3.255.255 福建省 电信 1.4.1.0 1.4.3.255 福建省 电信 1.4.5.0 1.4.7.255 广东省 电信 1.4.8.0 1.4.127.255 广东省 电信 1.10.0.0 1.10.7.255 福建省 电信 1.10.8.0 1.10.9.255 福建省 电信 1.10.11.0 1.10.15.255 广东省 电信 1.10.16.0 1.10.127.255 北京市 方正宽带 1.12.0.0 1.15.255.255 内蒙古 联通 1.24.0.0 1.31.255.255 内蒙古 赤峰市 联通 1.24.8.0 1.24.15.255 内蒙古 乌兰察布市 联通 1.24.32.0 1.24.39.255 内蒙古 乌兰察布市 联通 1.24.80.0 1.24.87.255 内蒙古 包头市 联通 1.24.184.0 1.24.191.255 内蒙古 乌兰察布市 联通 1.25.128.0 1.25.135.255 内蒙古 锡林郭勒盟 联通 1.25.152.0 1.25.191.255 内蒙古 巴彦淖尔市 联通 1.25.228.0 1.25.255.255 内蒙古 呼伦贝尔市 联通 1.26.0.0 1.26.15.255 内蒙古 赤峰市 联通 1.26.112.0 1.26.127.255 贵州省 电信 1.48.0.0 1.49.255.255 贵州省 贵阳市(电信CDMA全省共用出口) 电信 1.49.128.0 1.49.255.255 宁夏 电信 1.50.0.0 1.50.255.255 山东省 济南市(山东大学) 教育网 1.51.192.0 1.51.255.255 黑龙江省 联通 1.56.0.0 1.63.255.255 黑龙江省 鹤岗市 联通 1.56.0.0 1.56.95.255 黑龙江省 牡丹江市 联通 1.56.128.0 1.56.255.255 黑龙江省 绥化市 联通 1.57.0.0 1.57.63.255 黑龙江省 齐齐哈尔市 联通 1.57.64.0 1.57.127.255 黑龙江省 双鸭山市 联通 1.57.128.0 1.57.191.255 黑龙江省 鸡西市 联通 1.57.192.0 1.57.255.255 黑龙江省 哈尔滨市 联通 1.58.0.0 1.58.255.255 黑龙江省 大庆市 联通 1.59.16.0 1.59.127.255 黑龙江省 佳木斯市 联通 1.59.128.0 1.59.255.255 黑龙江省 黑河市 联通 1.60.0.0 1.60.63.255 黑龙江省 七台河市 联通 1.60.64.0 1.60.95.255 黑龙江省 伊春市 联通 1.60.128.0 1.60.191.255 黑龙江省 齐齐哈尔市 联通 1.60.192.0 1.60.255.255 黑龙江省 绥化市 联通 1.61.0.0 1.61.127.255 黑龙江省 齐齐哈尔市 联通 1.61.128.0 1.61.159.255 黑龙江省 哈尔滨市 联通 1.62.0.0 1.62.127.255 黑龙江省 鸡西市 联通 1.63.0.0 1.63.31.255 黑龙江省 绥化市 联通 1.63.152.0 1.63.159.255 黑龙江省 伊春市 联通 1.63.192.0 1.63.207.255 山西省 电信 1.68.0.0 1.71.255.255 陕西省 电信 1.80.0.0 1.87.255.255 陕西省 西安市 电信 1.80.0.0 1.80.255.255 陕西省 渭南市 电信 1.81.0.0 1.81.127.255 陕西省 汉中市 电信 1.81.128.0 1.81.255.255 陕西省 商洛市 电信 1.82.0.0 1.82.31.255 陕西省 安康市 电信 1.82.32.0 1.82.63.255 陕西省 榆林市 电信 1.82.64.0 1.82.127.255 陕西省 宝鸡市 电信 1.82.128.0 1.82.163.255 陕西省 西安市 电信 1.83.0.0 1.83.255.255 陕西省 西安市 电信 1.84.64.0 1.84.127.255 陕西省 西安市 电信 1.85.0.0 1.85.23.255 陕西省 延安市 电信 1.85.64.0 1.85.95.255 陕西省 安康市 电信 1.85.96.0 1.85.135.255 陕西省 咸阳市 电信 1.85.144.0 1.85.159.255 陕西省 西安市 电信 1.85.172.0 1.85.191.255 陕西省 西安市 电信 1.85.192.0 1.86.255.255 陕西省 西安市 电信 1.87.0.0 1.87.255.255 北京市 歌华有线宽带 1.88.0.0 1.91.255.255 北京市 电信通 1.92.0.0 1.93.255.255 内蒙古 电信 1.180.0.0 1.183.255.255 内蒙古 鄂尔多斯市 电信 1.180.64.0 1.180.67.255 内蒙古 乌海市 电信 1.180.128.0 1.180.135.255 内蒙古 呼和浩特市 电信 1.182.0.0 1.182.3.255 广东省 广州市(暨南大学) 教育网 1.184.0.0 1.184.127.255 黑龙江省 联通 1.188.0.0 1.191.255.255 河南省 郑州市 电信 1.192.0.0 1.192.191.255 河南省 电信 1.192.0.0 1.199.255.255 河南省 郑州市 电信 1.193.0.0 1.193.127.255 河南省 洛阳市 电信 1.193.128.0 1.193.239.255 河南省 平顶山市 电信 1.194.0.0 1.194.63.255 河南省 开封市 电信 1.194.128.0 1.194.159.255 河南省 安阳市 电信 1.194.192.0 1.194.255.255 河南省 新乡市 电信 1.195.0.0 1.195.63.255 河南省 焦作市 电信 1.195.64.0 1.195.127.255 河南省 濮阳市 电信 1.195.128.0 1.195.147.255 河南省 三门峡市 电信 1.195.192.0 1.195.255.255 河南省 商丘市 电信 1.196.64.0 1.196.79.255 河南省 信阳市 电信 1.196.192.0 1.196.223.255 河南省 鹤壁市 电信 1.197.0.0 1.197.15.255 河南省 漯河市 电信 1.197.32.0 1.197.63.255 河南省 周口市 电信 1.197.64.0 1.197.95.255 河南省 驻马店市 电信 1.197.96.0 1.197.127.255 河南省 许昌市 电信 1.197.128.0 1.197.159.255 河南省 南阳市 电信 1.197.160.0 1.197.175.255 河南省 焦作市 电信 1.197.192.0 1.197.207.255 河南省 安阳市 电信 1.197.208.0 1.197.223.255 河南省 周口市 电信 1.197.224.0 1.197.235.255 河南省 周口市 电信 1.199.0.0 1.199.15.255 河南省 新乡市 电信 1.199.96.0 1.199.127.255 北京市 (电信WIFI热点AP网段) 电信 1.202.0.0 1.203.255.255 贵州省 贵阳市 电信 1.204.0.0 1.204.255.255
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值