新报: 根据IP获取物理地址不需要调用接口啦

Posted yangbuyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新报: 根据IP获取物理地址不需要调用接口啦相关的知识,希望对你有一定的参考价值。

一、 复制data文件夹到自己的项目当中

可以进行加载到这个文件即可 博主放入在项目的根目录当中

请移步Gitee pull 该文件 https://gitee.com/yangbuyi/ip_file

获取点击量来一波 https://www.yangbuyi.top/login.html

技术图片

带入maven依赖 因为这个编辑器的原因 复制依赖 显示不出来淦!!!! 图片自己打吧

  
        
            org.lionsoul
            ip2region
            1.7.2
        

技术图片

二、最重要的一步 编译地理位置

找到自己的项目地址

执行打开cmd 执行这段代码

java -Dfile.encoding=utf-8 -jar dbMaker-1.2.2.jar -src ./data/ip.merge.txt -region ./data/global_region.csv

java -Dfile.encoding=utf-8 -jar dbMaker-1.2.2.jar -src ./data/ip.merge.txt -region ./data/global_region.csv

技术图片
技术图片

请跟着一步步来

技术图片
技术图片

代码开始 创建iputils

package top.yangbuyi.system.webapi;

import org.lionsoul.ip2region.DataBlock;
import org.lionsoul.ip2region.DbConfig;
import org.lionsoul.ip2region.DbSearcher;
import org.lionsoul.ip2region.Util;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.net.URLDecoder;

/**
 * description:  杨不易网站 :www.yangbuyi.top
 * program:  yangbuyi-erp-2020
 * ClassName:  iputils
 * create:  2020-07-10 09:20
 *
 * @author: yangbuyi
 * @since: JDK1.8
 * @iputils:
 **/

/**
 * 具体请看 SQL当中的 data文件  和jar包
 * 通过下面语句进行 编译 地理位置
 * java -jar dbMaker-1.2.2.jar -src ./data/ip.merge.txt -region ./data/global_region.csv
 */

public class iputils {
      
      public static String getCityInfo(String ip) throws UnsupportedEncodingException {
            //db
            String dbPath = new File("SQL/data/ip2region.db").getPath();
            dbPath = URLDecoder.decode(dbPath, "UTF-8");
            File file = new File(dbPath);
            if (file.exists() == false) {
                  System.out.println("Error: Invalid ip2region.db file");
            }
            //查询算法
            int algorithm = DbSearcher.BTREE_ALGORITHM; //B-tree
            //DbSearcher.BINARY_ALGORITHM //Binary
            //DbSearcher.MEMORY_ALGORITYM //Memory
            try {
                  DbConfig config = new DbConfig();
                  DbSearcher searcher = new DbSearcher(config, dbPath);
                  //define the method
                  Method method = null;
                  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;
                  }
                  DataBlock dataBlock = null;
                  if (Util.isIpAddress(ip) == false) {
                        System.out.println("Error: Invalid ip address");
                  }
                  dataBlock = (DataBlock) method.invoke(searcher, ip);
                  String decode = URLDecoder.decode(dataBlock.getRegion(), "UTF-8");
                  return decode;
            } catch (Exception e) {
                  e.printStackTrace();
            }
            return null;
      }
      
      public static void main(String[] args) throws Exception {
            System.err.println(iputils.getCityInfo("106.18.167.102"));
      }
      
}

最后 测试代码

技术图片

太累了吧!!!!



以上是关于新报: 根据IP获取物理地址不需要调用接口啦的主要内容,如果未能解决你的问题,请参考以下文章

WebApi中,怎么获取接口调用者的外网ip地址

PHP 根据ip获取对应的实际地址

java根据ip地址获取相应的所在地,精确到街道和门牌号,要怎么实现?

WebApi中,怎么获取接口调用者的外网ip地址

服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)

全网最全的免费api接口-IP地址/域名归属地查询