Springboot集成ip2region离线IP地名映射-修订版

这篇具有很好参考价值的文章主要介绍了Springboot集成ip2region离线IP地名映射-修订版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


title: Springboot集成ip2region离线IP地名映射 date: 2020-12-16 11:15:34 categories: springboot description: Springboot集成ip2region离线IP地名映射

  • 1. 背景
  • 2. 集成
    • 2.1. 步骤
    • 2.2. 样例
    • 2.3. 响应实例DataBlock
    • 2.4. 响应实例RegionAddress
  • 3. 打开浏览器
  • 4. 源码地址,如果觉得对你有帮助,请Star

Springboot集成ip2region离线IP地名映射-修订版,博文,工具,spring boot,tcp/ip,后端

1. 背景

前段时间因业务需要,客户提出根据每天外网访问进来IP地址,分析出来所属地区,并且针对一些热点区域的IP访问想做到事后预警与特殊处理。

目前主流根据IP地址翻译地区的做法主要有:在线查询和离线查询。

  • 在线处理地址全,而且跟新频率快,准确性较高。目前国内提供在线主要有:淘宝IP地址库、IPIP.NET、138IP。

  • 离线的方式就是根据IP的定义,自动翻译为所属地区。

但是考虑我们实际服务器都运行在内网,根据触及不到公网,而且就算开放公网,面临的风险还是很大,所以这种方案就被抛弃掉了。

而且他们在线翻译的还有一个弊端,就是可能会在高峰期对我们的请求进行限流。不利于我们业务处理。

最终只剩下于是想到用离线的方式来处理从网关发来的数据。找了下,看到个开源项目ip2region 官网上介绍,这是一个 离线IP 地址定位库和 IP 定位数据管理框架,可以提供 10微秒 级别的查询效率,并且提供众多主流编程语言的 X-DB 数据生成和查询客户端实现。

X-DB 概述:


X-DB 是一种基于大数据云架构时数据库,主要处理工业生产过程数据的数据库,具有 “海量数据” 处理能力,它的架构灵活,易于数据的部署、管理、扩充以及业务数据的集成;其数据可以分布在不同网络的服务器和磁盘上,可以根据需要对数据进行动态扩展以便支持更大的数据量和访问量,并且完全没有任何限制。

  • Ip2region参考1
  • ip2region参考2
  • XDB

使用起来相对成本较低,本着先用满足需求再说,虽然在性能上并不能满足海量IP的分析,还有提升的空间。

看作者的例子,较为简单,也不多说。先看下我的目录结构吧

war3-infi
+---src
|   +---main
|   |   +---java
|   |   \---resources
|   |       +---generator
|   |       +---ipdb
|   |   |   |   +---ip2region.xdb
|   |       +---mapper
|   |       +---application.yml

2. 集成

2.1. 步骤

在上述的样例中,我们将项目 Clone 到本地。

  • ip2region.xdb 这是需要下载,下载地址,这里提供 CsvTxtXDB 文件三种格式,根据需要自行选择。

  • ipdb这是我放db库文件的路径,当然可以自定义,只需要在application.yml 中配置即可。

  • application.yml 这个就不多说啦。

2.2. 样例

因我引入 Redis 此处可以弃用,将 Redis 注释即可。

server:
  port: 9090

spring:
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379

ip2region:
  external: false
  index-block-size: 4096
  total-header-size: 8192
  location: classpath:ipdb/ip2region.xdb

例子如下,RegionAddressDataBlock 两种结果返回封装,我们提供三种方式供选择性输入:

  • /convert/{ip}:
  • /region/{ip}:
  • /region/ip={ip}:

package xyz.wongs.drunkard.war3.web.controller;


import com.github.hiwepy.ip2region.spring.boot.IP2regionTemplate;
import com.github.hiwepy.ip2region.spring.boot.ext.RegionAddress;
import lombok.extern.slf4j.Slf4j;
import org.nutz.plugins.ip2region.DataBlock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import xyz.wongs.drunkard.base.aop.annotion.ApplicationLog;
import xyz.wongs.drunkard.base.message.annoation.ResponseResult;
import xyz.wongs.drunkard.base.message.exception.DrunkardException;
import xyz.wongs.drunkard.war3.limit.RequestLimit;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName IndexController
 * @Description 
 * @author WCNGS@QQ.COM
 * @Github <a>https://github.com/rothschil</a>
 * @date 20/11/18 11:00
 * @Version 1.0.0
*/
@Slf4j
@RestController
@ResponseResult
public class IndexController {

    @Autowired
    IP2regionTemplate template;

    /** 根据输入IP地址,返回解析后的地址
     * @Description
     * @param ip
     * @return xyz.wongs.drunkard.base.message.response.ResponseResult
     * @throws
     * @date 2020/8/17 18:26
     */
    @GetMapping(value = "/convert/{ip}")
    public DataBlock convertDataBlock(@PathVariable String ip){
        DataBlock dataBlock = null;
        try {
            dataBlock = template.binarySearch(ip);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return dataBlock;
    }

    /** 根据输入IP地址,返回解析后的地址
     * @Description
     * @param ip
     * @return xyz.wongs.drunkard.base.message.response.ResponseResult
     * @throws
     * @date 2020/8/17 18:26
     */
    @RequestLimit(maxCount=3)
    @GetMapping(value = "/region/{ip}")
    public RegionAddress convert(@PathVariable String ip){
        RegionAddress regionAddress = null;
        try {
            regionAddress = template.getRegionAddress(ip);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return regionAddress;
    }


    /** 根据输入IP地址,返回解析后的地址
     * @Description
     * @param ip
     * @return xyz.wongs.drunkard.base.message.response.ResponseResult
     * @throws
     * @date 2020/8/17 18:26
     */
    @GetMapping(value = "/region/ip={ip}")
    public RegionAddress caseInsensitive(@PathVariable String ip){
        RegionAddress regionAddress = null;
        try {
            regionAddress = template.getRegionAddress(ip);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return regionAddress;
    }

}

2.3. 响应实例DataBlock


package org.lionsoul.ip2region;

/**
 * data block class
 * 
 * @author	chenxin<chenxin619315@gmail.com>
*/
public class DataBlock 
{
	/**
	 * city id 
	*/
	private int city_id;
	
	/**
	 * region address
	*/
	private String region;
	
	/**
	 * region ptr in the db file
	*/
	private int dataPtr;
	

}

2.4. 响应实例RegionAddress


public class RegionAddress {

    private String country;
    private String province;
    private String city;
    private String area;
    private String ISP;

    public RegionAddress() {
    }

    /**
     * Translate this string "中国|华东|江苏省|南京市|电信" to location fields.
     * @param region location region address info array
     */
    public RegionAddress(String[] region) {
        this(region[0], region[2], region[3], region[1], region[4]);
    }

3. 打开浏览器

访问 http://localhost:9090/region/ip=109.27.45.12 这是我之前一个例子,用来解析IP地址,获取地域信息的。

Springboot集成ip2region离线IP地名映射-修订版,博文,工具,spring boot,tcp/ip,后端

4. 源码地址,如果觉得对你有帮助,请Star

Github源码地址

Gitee源码地址

Springboot集成ip2region离线IP地名映射-修订版,博文,工具,spring boot,tcp/ip,后端文章来源地址https://www.toymoban.com/news/detail-659262.html

到了这里,关于Springboot集成ip2region离线IP地名映射-修订版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【GitHub精选项目】IP 地址转地理位置:ip2region 完全指南

    本文为大家带来的是 lionsoul2014 开发的 ip2region 项目,一种高效的离线 IP 地址定位库。ip2region 提供了10微秒级别的查询效率,支持多种主流编程语言,是一种理想的 IP 定位解决方案。 这个开源项目可以实现 IP 地址到地理位置的精确映射,包括国家、省份、城市、运营商等信

    2024年02月04日
    浏览(34)
  • Stable Diffusion 绘画入门教程(webui)-ControlNet(IP2P)

    上篇文章介绍了深度Depth,这篇文章介绍下IP2P(InstructP2P), 通俗理解就是图生图,给原有图加一些效果,比如下图,左边为原图,右边为增加了效果的图: 玩法流程和之前一样哦 我这里用的大模型是\\\"anything-v5-PrtRE.safetensors\\\",选用不同模型生成效果会有区别,可以自己找喜欢的

    2024年04月25日
    浏览(57)
  • Springboot 集成 Redis集群配置公网IP连接报私网IP连接失败问题

    创建6个配置文件:redis-6381.conf,redis-6382.conf,redis-6383.conf,redis-6384.conf,redis-6385.conf, redis-6386.conf。配置文件内容如下: 1:代码配置 2:yml 配置 让Redis暴露公网IP其实在redis.conf配置文件里是能找到的,这里我们可以手动指定Redis的公网IP、端口以及总线端口(默认服务端口加10000)。

    2024年02月01日
    浏览(39)
  • 【获取IP归属地】Java如何实现通过IP获取IP归属地 [离线+在线](附代码,2023年亲测有效)

    【写在前面】 编撰这篇文章还得从之前做安全业务需求说起,我们都知道安全攻击都是在某台客户机上执行某些恶意操作(sql注入,DoS/DDoS攻击),致使服务端响应异常崩溃亦或响应数据被篡改,那么怎么去阻止这些东西呢? 首先我想到的是对访问的web端做一个IP的校验(好

    2023年04月24日
    浏览(47)
  • 准确率 99.9% 的离线IP地址定位库

    Ip2region 是一个离线 IP 地址定位库,准确率高达 99.9%,搜索性能为 0.0x 毫秒。DB 文件只有几兆字节,其中存储了所有 IP 地址。 支持 Java、PHP、C、Python、Nodejs、Golang、C#、lua 等查询绑定。查询算法使用二叉树、B树和内存搜索算法。 查询准确率高达99.9% 数据来源于一些知名的

    2024年02月12日
    浏览(39)
  • 一个查询IP地理信息和CDN提供商的离线终端工具Nali官方使用指南

    一个查询IP地理信息和CDN提供商的离线终端工具. 支持多种数据库 纯真 IPv4 离线数据库 ZX IPv6 离线数据库 Geoip2 城市数据库 (可选) IPIP 数据库 (可选) ip2region 数据库 (可选) DB-IP 数据库 (可选) IP2Location DB3 LITE 数据库 (可选) CDN 服务提供商查询 支持管道处理 支持交互式查询 同时支

    2024年02月22日
    浏览(43)
  • Socks5、代理IP和HTTP的集成应用

    1.1 握手与安全连接 Socks5协议通过握手过程实现安全连接的建立,具有版本协商和多种身份验证方式。这奠定了其在网络通信中的安全基石。 1.2 灵活的数据传输 支持TCP和UDP协议的Socks5代理,通过中间服务器进行数据传输,实现了高度灵活性。这种代理方式不仅仅限于Web请求

    2024年02月03日
    浏览(48)
  • SpringBoot 服务注册IP选择问题

    有时候我们明明AB服务都注册成功了,但是相互之间就是访问不了,这大概率是因为注册时选择IP时网卡选错了,当我们本地电脑有多个网卡时,程序会随机选择一个有IPV4的网卡,然后读取IPv4的地址 比如我的电脑有3个网卡,程序注册时就经常用192.168.211.1 这个地址,这个地

    2024年01月20日
    浏览(27)
  • SpringBoot 快速实现IP地址解析

    如果使用本地ip 解析的话,我们将会借助ip2region,该项目维护了一份较为详细的本地ip 地址对应表,如果为了离线环境的使用,需要导入该项目依赖,并指定版本,不同版本的方法可能存在差异。 官方gitee:gitee.com/lionsoul/ip… 在使用时需要将 xdb 文件下载到工程文件目录下,

    2024年02月15日
    浏览(27)
  • 【SpringBoot】SpringBoot获取不到用户真实IP怎么办

    项目部署后发现服务端无法获取到客户端真实的IP地址,这是怎么回事呢?给我都整懵逼了,经过短暂的思考,我发现了问题的真凶,那就是我们使用了Nginx作的请求转发,这才导致了获取不到客户端真实的IP地址,害,看看我是怎么解决的吧! 客户端请求数据时走的是Nginx反

    2024年02月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包