返回顶部
首页 > 资讯 > 后端开发 > Python >Java利用ip2region实现获取IP地址详情
  • 915
分享到

Java利用ip2region实现获取IP地址详情

2024-04-02 19:04:59 915人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

最近有个需求是通过ip地址获取地址详情,没有弄过相关的接口,通过查资料搞定之后赶紧记录分享一下 一开始我是通过api的方法获取但是总是报错获取不到所以改用了ip2region离线ip

最近有个需求是通过ip地址获取地址详情,没有弄过相关的接口,通过查资料搞定之后赶紧记录分享一下

一开始我是通过api的方法获取但是总是报错获取不到所以改用了ip2region离线ip解析的方法获取的,废话不多说看操作。

首先要下载ip2region.db

下载地址:百度网盘 请输入提取码​​​​​​

提取码:vik5

配置依赖

<dependency>
   <groupId>org.lionsoul</groupId>
   <artifactId>ip2region</artifactId>
   <version>1.7.2</version>
</dependency>

将文件放到resources目录下

配置一个工具类(里面有个测试方法)

之前我在网上查的资料用完之后本地是可以的测试的但是部署到服务器之后就找不到ip2region.db这个文件了,因为这个文件我是放在resources目录 下面的,大家都知道打包之后resources这个目录 是不存在的所以找不到这个文件,后来试了很久才搞定,下面是优化的工具类

@Slf4j
public class IpUtil {
 
    
    public static String getIpAddr(httpservletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("X-Real-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        if ("0:0:0:0:0:0:0:1".equals(ip)) {
            ip = "127.0.0.1";
        }
        if (ip.split(",").length > 1) {
            ip = ip.split(",")[0];
        }
        return ip;
    }
 
    
    public static String getCityInfo(String ip) throws IOException {
        // 这里能读到这个流,但是是找不到这个文件的
        ClassPathResource classPathResource = new ClassPathResource("ip2region.db");
        // 我们新建一个文件,把流存放到这个文件,再从这个文件里面读取数据,就可以了
        File file = new File("ip2region.db");
        FileUtils.copyInputStreamToFile(classPathResource.getInputStream(),file);
        // todo 获取输入流
        InputStream inputStream = new FileInputStream(file);
        try {
            int len;
            byte[] buffer = new byte[1024];
            //todo 这里的输出记得删除再上线
            while ((len = inputStream.read(buffer)) != -1) {
               // System.out.println(new String(buffer, 0, len));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            // TODO 记得关闭流操作
            inputStream.close();
        }
        //查询算法
        int alGorithm = DbSearcher.BTREE_ALGORITHM; //B-tree
        try {
            DbConfig config = new DbConfig();
            DbSearcher searcher = new DbSearcher(config,file.getPath());
            Method method;
            switch ( algorithm )
            {
                case DbSearcher.BTREE_ALGORITHM:
                    method = searcher.getClass().getMethod("btreeSearch", String.class);
                    break;
                case DbSearcher.BINARY_ALGORITHM:
                    method = searcher.getClass().getMethod("binarySearch", String.class);
                    break;
                case DbSearcher.MEMORY_ALGORITYM:
                    method = searcher.getClass().getMethod("memorySearch", String.class);
                    break;
                default:
                    return null;
            }
            DataBlock dataBlock;
            if (!Util.isIpAddress(ip)) {
                log.info("Error: Invalid ip address");
                return null;
            }
            dataBlock  = (DataBlock) method.invoke(searcher, ip);
            return dataBlock.getRegion();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
 
    public static void main(String[] args) {
        try {
            // 这个ip的结果是   中国|0|香港|0|香港宽频
            String detail = IpUtil.getCityInfo("58.176.81.30");
            System.out.println(detail);
        }catch (IOException e){
 
        }
 
    }
 
}

到这里就完事了。

这下面是一下国外的ip地址可以测试一下

  '35.187.132.16',
  '35.187.132.18',
  '49.35.162.6',
  '5.188.210.227',
  '64.233.173.10',
  '74.125.151.127',
  '74.125.212.219',
  '74.125.212.221',
  '95.184.60.224'

到此这篇关于Java利用ip2region实现获取IP地址详情的文章就介绍到这了,更多相关Java ip2region获取IP地址内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java利用ip2region实现获取IP地址详情

本文链接: https://lsjlt.com/news/165581.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java利用ip2region实现获取IP地址详情
    最近有个需求是通过ip地址获取地址详情,没有弄过相关的接口,通过查资料搞定之后赶紧记录分享一下 一开始我是通过api的方法获取但是总是报错获取不到所以改用了ip2region离线ip...
    99+
    2024-04-02
  • java实现通过IP地址获取mac(物理地址)
    java实现通过IP地址获取mac(物理地址),只能获取到局域网的mac地址,具体代码如下: package com.qcmsa.util;import org.apache.commons.log...
    99+
    2023-09-01
    java tcp/ip macos
  • 利用java如何根据IP获取mac地址
    利用java如何根据IP获取mac地址?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体内容如下import java.net.InetAddress;import jav...
    99+
    2023-05-31
    java ip mac
  • 怎么利用php获取ip地址
    这篇文章主要介绍了怎么利用php获取ip地址,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。众所周知一般在计算机查询本机ip地址时,使用的是dos命令 win + r 调出do...
    99+
    2023-06-14
  • Java根据ip地址获取归属地实例详解
    目录引言Java 中是如何获取 IP 属地的首先需要写一个 IP 获取的工具类内置的三种查询算法使用方法项目用到的全部依赖引言 最近...
    99+
    2024-04-02
  • Java-通过IP获取真实地址
    文章目录 前言功能实现测试 前言 最近写了一个日志系统,需要通过访问的 IP 地址来获取真实的地址,并且存到数据库中,我也是在网上看了一些文章,遂即整理了一下供大家参考。 功能实现 这个是获取正确 IP 地址的方法,可以直...
    99+
    2023-08-16
    java tcp/ip 网络
  • java如何获取ip地址
    java获取IP地址的方法: private static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("...
    99+
    2016-06-05
    java基础 java
  • Java实现获取内网的所有IP地址
    目录题目描述代码详解效果展示题目描述 在进行网络编程时,有时需要对局域网的所有主机进行遍历,为此需要获得内网的所以IP地址 题目实现:获得内网的所有IP地址的小应用。 解题思路 创建...
    99+
    2024-04-02
  • java怎么实现获取客户端ip地址
    这篇“java怎么实现获取客户端ip地址”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java怎么实现获取客户端ip地址”文...
    99+
    2023-06-29
  • 使用Java如何获取IP地址
    本篇文章给大家分享的是有关使用Java如何获取IP地址,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、通过IP获取机器名 or 通过机器名获取iphost :主机 ...
    99+
    2023-05-31
    java ip ava
  • 用户的MAC地址如何利用java实现获取
    用户的MAC地址如何利用java实现获取?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java实现获取用户的MAC地址方法:方法一:将本机地址与局域网内其他机器区分开来 p...
    99+
    2023-05-31
    java mac地址 ava
  • 如何在Java中利用Request请求获取IP地址
    如何在Java中利用Request请求获取IP地址?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。示例代码public class IpAdrressUt...
    99+
    2023-05-30
    java request ip地址
  • 客户端的IP地址与MAC地址怎么利用Java进行获取
    这篇文章将为大家详细讲解有关客户端的IP地址与MAC地址怎么利用Java进行获取,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.获取客户端IP地址public String getIp(H...
    99+
    2023-05-31
    java ip地址 mac地址
  • 用python获取MAC地址和IP地址
    # ifconfig eth0 eth0      Link encap:Ethernet  HWaddr 50:E5:49:3A:EA:90             inet addr:172.28.10.71  Bcast:172.28...
    99+
    2023-01-31
    地址 python MAC
  • JAVA根据ip地址获取归属地
    IP获取归属地 1.通过地址库获取         如果使用API接口获取,可能会出现服务挂了,或者服务地址不提供服务了等问题。而采用本地地址库就没有这些问题。 本文采用离线IP地址定位库 Ip2region,Ip2region是一个离线I...
    99+
    2023-10-05
    java spring boot 后端
  • Android 获取IP地址的实现方法
    Android 获取IP地址 最近做项目,有一个需求是Android设备获取当前IP的功能,经过一番查询资料解决了,记录下实现方法。 1.使用WIFI 首先设置用户权限 &l...
    99+
    2022-06-06
    获取ip地址 ip 方法 Android
  • python实现获取服务器IP地址
    第一种:#!/usr/bin/env pythonimport  osip=os.popen("ifconfig eth0 | awk -F [:' ']+ 'NR==2{print $4}'")print ip.readline()第二种...
    99+
    2023-01-31
    地址 服务器 python
  • Java如何实现获取内网的所有IP地址
    本篇内容主要讲解“Java如何实现获取内网的所有IP地址”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java如何实现获取内网的所有IP地址”吧!题目描述在进行网络编程时,有时需要对局域网的所有...
    99+
    2023-07-02
  • Python如何实现获取内网IP地址
    本文小编为大家详细介绍“Python如何实现获取内网IP地址”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何实现获取内网IP地址”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。方法一import&n...
    99+
    2023-07-05
  • Java 获取本机IP地址的实例代码
    目录前言一、规则二、获取1.使用2.工具类前言 在Java中如何准确的获取到本机IP地址呢?网上大部分的做法是InetAddress.getLocalHost().getHostAd...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作