快捷搜索:  汽车  科技

springboot 日志采样率,springboot整合GeoLite2实现IP转经纬度

springboot 日志采样率,springboot整合GeoLite2实现IP转经纬度下载地址:https://www.maxmind.com/en/accounts/561549/geoip/downloads通过GeoLite2,Java根据IP获得城市、经纬度。地图飞线或者坐标点的展示都是通过经纬度进行设置的,如果拿不到对应的经纬度则无法对地图攻击来源进行演示。为此查找方案,可以通过IP对经纬度的转换来实现攻击的展现(坐标点存在误差,非精确经纬度)。通过输入一个IP地址,解析并获取信息,比如国家、国家代码、省份、省份代码、城市、邮政编码、经纬度等等信息三方在线地址:ip-api.com

今日分享

每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您。

架构开源地址:https://gitee.com/msxy

评论转发

业务场景

在实际的业务中,涉及到攻防数据的演示,但是基础的数据只有攻击的IP,如何在地图上展示攻击的来源?

地图飞线或者坐标点的展示都是通过经纬度进行设置的,如果拿不到对应的经纬度则无法对地图攻击来源进行演示。为此查找方案,可以通过IP对经纬度的转换来实现攻击的展现(坐标点存在误差,非精确经纬度)。

在线IP获取地区

通过输入一个IP地址,解析并获取信息,比如国家、国家代码、省份、省份代码、城市、邮政编码、经纬度等等信息

三方在线地址:ip-api.com

GeoLite2 数据库下载

通过GeoLite2,Java根据IP获得城市、经纬度。

下载地址:https://www.maxmind.com/en/accounts/561549/geoip/downloads

springboot 日志采样率,springboot整合GeoLite2实现IP转经纬度(1)

springboot 日志采样率,springboot整合GeoLite2实现IP转经纬度(2)

springboot 日志采样率,springboot整合GeoLite2实现IP转经纬度(3)

因为我需要获取城市信息,所以选择第三个,压缩包大概30MB,解压后里面的 mmdb 有60MB

springboot 日志采样率,springboot整合GeoLite2实现IP转经纬度(4)

springboot项目整合及使用1、添加依赖

<dependency> <groupId>com.maxmind.geoip2</groupId> <artifactId>geoip2</artifactId> <version>2.13.1</version> </dependency>2、实现工具类

package com.qingfeng.common.controller; import java.io.File; import java.io.IOException; import java.net.InetAddress; import javax.servlet.http.HttpServletRequest; import com.maxmind.geoip2.DatabaseReader; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @ProjectName IpGeoUtils * @author Administrator * @version 1.0.0 * @Description 获取客户端IP地址 * @createTime 2021/6/3 14:29 */ public class IpGeoUtils { private static Logger logger = LoggerFactory.getLogger(IpGeoUtils.class); /** * 获取客户端IP地址 * * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 */ public static String getIP(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; } /** * * @description: 获得国家 * @param reader * @param ip * @return * @throws Exception */ public static String getCountry(DatabaseReader reader String ip) throws Exception { return reader.city(InetAddress.getByName(ip)).getCountry().getNames().get("zh-CN"); } /** * * @description: 获得省份 * @param reader * @param ip * @return * @throws Exception */ public static String getProvince(DatabaseReader reader String ip) throws Exception { return reader.city(InetAddress.getByName(ip)).getMostSpecificSubdivision().getNames().get("zh-CN"); } /** * * @description: 获得城市 * @param reader * @param ip * @return * @throws Exception */ public static String getCity(DatabaseReader reader String ip) throws Exception { return reader.city(InetAddress.getByName(ip)).getCity().getNames().get("zh-CN"); } /** * * @description: 获得经度 * @param reader * @param ip * @return * @throws Exception */ public static Double getLongitude(DatabaseReader reader String ip) throws Exception { // return reader.city(InetAddress.getByName(ip)).getLocation().getLongitude(); double data = 0; try { data = reader.city(InetAddress.getByName(ip)).getLocation().getLongitude(); }catch (Exception e){ } return data; } /** * * @description: 获得纬度 * @param reader * @param ip * @return * @throws Exception */ public static Double getLatitude(DatabaseReader reader String ip){ double data = 0; try { data = reader.city(InetAddress.getByName(ip)).getLocation().getLatitude(); }catch (Exception e){ } return data; } public static void main(String[] args) throws Exception { // String path = req.getSession().getServletContext().getRealPath("/WEB-INF/classes/GeoLite2-City.mmdb"); String path = "D:/java/GeoLite2-City/GeoLite2-City.mmdb"; // 创建 GeoLite2 数据库 File database = new File(path); // 读取数据库内容 DatabaseReader reader = new DatabaseReader.Builder(database).build(); // 访问IP String ip = "28.16.2.122"; String site = IpGeoUtils.getCountry(reader ip) "-" IpGeoUtils.getLongitude(reader ip) "-" IpGeoUtils.getLatitude(reader ip); System.out.println(site); Double lon = IpGeoUtils.getLongitude(reader ip); double lat = IpGeoUtils.getLatitude(reader ip); System.out.println("Lon:" lon "---Lat:" lat); } }

猜您喜欢: