在日志处理过程中,常常会遇到ip地址的分析,就要涉及到ip地址解析为城市的操作。

下面介绍2种方法:

方法一:只能够进行中国的ip地址转换为城市的操作,国外的解析不是很实用。

方法二:可以进行全球的ip地址的各项解析,解析城市、国家、经纬度等等。

方法一:

一个使用他人的源码来实现此功能的方法,希望能帮助有需要的人。

步骤如下:

1)将源码从github上下载下来

$ git clone https://github.com/wzhe06/ipdatabase

或者:从百度云中下载:

链接:https://pan.baidu.com/s/1Rm9d44bv3Ewd5LZm1pUtwg 
提取码:e6x9

2)进行编译

$ mvn clean package -DskipTests

3)将编译好的jar包安装到maven库里

$ mvn clean install -DskipTest

在安装过程中,查看文件将jar放入到了maven的哪个目录下

4)将自己项目的pom.xml文件中,添加此源码的依赖

<dependency><groupId>com.ggstar</groupId><artifactId>ipdatabase</artifactId><version>1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.14</version></dependency>

5)编码应用

package com.hzkj.spark.utilsimport com.ggstar.util.ip.IpHelper/*** @Title: IpUtils* @ProjectName SparkStreamingProject* @Description: IP解析工具类* @author fanyanyan*/
object IpUtils {def getCity(ip: String)={IpHelper.findRegionByIp(ip)}def main(args: Array[String]): Unit = {println(getCity("123.125.71.38"))}
}

6)另外该外部源码的运行,需要依赖两个文件(可从源码resources中找到)

ipDatabase.csv

ipRegion.xlsx

记得要将这两个文件放入到自己项目的resources下

方法二:

该方法需要下载好一个外部数据文件:

地址如下:

链接:https://pan.baidu.com/s/1u4_7dfspUYmKt21QBhjc7g 
提取码:619p

下载好之后,将数据文件放入到指定路径下,便于后期调用。

在pom.xml文件中导入依赖:

<!--ip地址解析依赖-->
<dependency><groupId>com.maxmind.geoip2</groupId><artifactId>geoip2</artifactId><version>2.12.0</version>
</dependency>

编写测试用例(IpUtils.java):

package com.fyy.spark.project.utils;import com.maxmind.geoip2.DatabaseReader;
import com.maxmind.geoip2.model.CityResponse;
import com.maxmind.geoip2.record.*;
import org.apache.hadoop.hbase.client.ConnectionFactory;import java.io.File;
import java.io.IOException;
import java.net.InetAddress;/*** @author fanyanyan* @Title: IpUtils* @ProjectName SparkStreamingProject* @Description: 全球Ip地址转义(国家、城市、经纬度等)*/
public class IpUtils{/*** Ip转换国家* @param ip*/public static String getCountry(String ip) throws Exception{File database = new File("E:\\IDEA\\IdeaProject\\SparkStreamingProject\\data\\GeoLite2-City\\GeoLite2-City.mmdb");DatabaseReader reader = new DatabaseReader.Builder(database).build();String countryName = "未知";InetAddress ipAddress = InetAddress.getByName(ip);CityResponse response = reader.city(ipAddress);Country country = response.getCountry();countryName = country.getNames().get("zh-CN");return countryName;}/*** Ip转换城市* @param ip*/public static String getCity(String ip) throws Exception{File database = new File("E:\\IDEA\\IdeaProject\\SparkStreamingProject\\data\\GeoLite2-City\\GeoLite2-City.mmdb");DatabaseReader reader = new DatabaseReader.Builder(database).build();String cityName = "未知";InetAddress ipAddress = InetAddress.getByName(ip);CityResponse response = reader.city(ipAddress);City city = response.getCity();cityName = city.getNames().get("zh-CN");return cityName;}/*** Ip转换经纬度* @param ip*/public static Location getLocation(String ip) throws Exception{File database = new File("E:\\IDEA\\IdeaProject\\SparkStreamingProject\\data\\GeoLite2-City\\GeoLite2-City.mmdb");DatabaseReader reader = new DatabaseReader.Builder(database).build();InetAddress ipAddress = InetAddress.getByName(ip);CityResponse response = reader.city(ipAddress);Location location = response.getLocation();return location;}public static void main(String agrs[]) throws Exception {IpUtils ipUtils = new IpUtils();String ip = "123.125.71.38";String city = ipUtils.getCity(ip);System.out.println(city);Location location = ipUtils.getLocation(ip);System.out.println(location);}
}

爬坑:

1、错误一

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Incompatible Jackson version: 2.9.5

请修改依赖的版本为2.5.0即可。

<!--ip地址解析依赖-->
<dependency>
    <groupId>com.maxmind.geoip2</groupId>
    <artifactId>geoip2</artifactId>
    <version>2.5.0</version>
</dependency>

2、错误二:

Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.node.ArrayNode.<init>(Lcom/fasterxml/jackson/databind/node/JsonNodeFactory;Ljava/util/List;)V

请调整pom.xml文件中依赖的优先级即可。(未出现问题,请略过)

其他方案请参考github:

https://github.com/maxmind/GeoIP2-java

ip地址解析(scala)相关推荐

  1. dns按来路ip智能解析_求助DNS问题,如何根据来源Ip地址作策略,使不同来源的IP地址解析到不同地址?...

    求助DNS问题,如何根据来源Ip地址作策略,使不同来源的IP地址解析到不同地址? (2012-01-10 08:43:58) 标签: ip地址 如何 杂谈 求助DNS问题,如何根据来源Ip地址作策略, ...

  2. DNS实战 正反向解析,域名/IP地址解析

    正向解析,反向解析 #菜鸟程序媛的分享 先来了解一下几个目录 ##下面我们开始实战操作一下## ###RedHat 先连接镜像 进入下图所示界面 ##下面我们开始反向解析(IP地址变域名) ##在实战 ...

  3. 传输层:IP 地址解析 路由转发

    IP 地址与硬件地址 1. 地址解析 通过IP地址将其如何转换为 MAC 地址.解决同一个局域网上的主机或路由的 IP 地址和硬件地址的映射问题. 即以太网上除了主机还有路由. 即如果发出的请求所有的 ...

  4. 获取ip地址解析归属地

    本文目的: 通过分析ip地址归属地解析过程,分享探究问题的基本步骤,逐步认识基础知识的重要. 声明一下: 基于本人知识视野,个人理解能力的限制,文中难免有不当之处,敬请理解. 大家都知道,网上有很多可 ...

  5. android解析ip地址,android – 如何从IP地址解析网络主机名

    我正在研究基于wifi的聊天引擎,我能够通过跟随this链接检索连接到当前wifi网络的主机列表,现在获得了具有ip地址的设备列表但我需要来自ip地址的主机名并尝试以下 InetAddress ine ...

  6. ip地址解析成国家、城市、iso code或者按语言获取城市名

    通过使用免费geoip库,解析ip.github完整项目代码:https://github.com/luoqifei/user-location/tree/master/geoipdemo 学习Geo ...

  7. IP 地址解析与子网划分教程

    数据来源 一.简单局域网的构成 局域网: 一般称为内网 简单局域网的构成: 交换机.网线.PC(其他IT终端) 交换机: 用来组建内网的局域网的设备,交换机并不能让电脑上网,需要通过路由器 路由器: ...

  8. 每台计算机的ip地址解析,IP地址详解

    简单的局域网构造 什么是局域网:局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组.一般称为内网. 局域网通信规则:在同一个局域网中,所以的ip地址必须 ...

  9. 举出至少两种不需要发送ARP请求分组的情况(即不需要请求将某个目的IP地址解析为相应的硬件地址)

    (1)在源主机的ARP高速缓存中已经有了该目的IP地址的项目: (2)源主机发送的是广播分组: (3)源主机和目的主机使用点对点链路:

  10. python学习—— IPy 强大的IP地址解析模块

    最近在忙着做计算机网络的课程设计,打算写一个可以扫描内网主机的扫描工具.学习过程中安利到了许多python新姿势,IPy模块就是其中一个. 1.IPy模块. 在IP地址规划中,涉及到计算大量的IP地址 ...

最新文章

  1. 吐血总结|史上最全的MySQL学习资料!!
  2. JAVA实现变态跳台阶问题(《剑指offer》)
  3. 对require和import的认识
  4. 1810: Huffuman树(vector模拟)
  5. C++ Vector 使用心得
  6. python pyqt5 线程 暂停 重启_如何在PyQT5中暂停/播放线程?
  7. Linux中的head命令
  8. Hdoj 1064 Financial Management
  9. 微宝球型机器人功能_腾讯智能球型机器人专属app(微宝)
  10. Hadoop实战之一~Hadoop概述
  11. 兰州中川机场停车费一天多少钱,中川机场附近停车便宜
  12. 科技爱好者周刊(第 171 期):云服务流量有多贵?
  13. js return加分号_JS代码中加分号和不加分号的区别
  14. SafeArea的使用
  15. python 实现接口上传图片
  16. Eagle设计师必备利器管理工具
  17. linux usb 全向麦克风,派尼珂USB视频会议全向阵列麦克风NK-OM300U
  18. 怎么安装LINUX系统
  19. 生成QR二维码图片示例
  20. 【暮色天】大炮一响 黄金万两(3.3)

热门文章

  1. java架构师是做什么的 java架构师的工作内容
  2. 前端安全- 常见的网络攻击
  3. 数据挖掘案例(1):泰坦尼克号-数据挖掘流程
  4. 保姆级教程:个人深度学习工作站配置指南
  5. xci转化nsp_Switch游戏XCI转NSP的教程+工具下载
  6. python turtle库下载_turtle库安装
  7. 网易视频云技术分析:IOS工程常见问题解决方法
  8. 不用任何插件:小白如何白嫖百度网盘下载速度(不好用来打我,嘿嘿)
  9. 南航的计算机专业好考吗,南航计算机拟录取名单公布,各个专业都有倒数第一逆袭成功...
  10. php中阿里云快递物流查询接口使用