ip地址解析(scala)

在日志处理过程中,常常会遇到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文件中,添加此源码的依赖


        
            com.ggstar
            ipdatabase
            1.0
        

        
            org.apache.poi
            poi-ooxml
            3.14
        

5)编码应用

package com.hzkj.spark.utils

import 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文件中导入依赖:



    com.maxmind.geoip2
    geoip2
    2.12.0

编写测试用例(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即可。



    com.maxmind.geoip2
    geoip2
    2.5.0

2、错误二:

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

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

 

其他方案请参考github:

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

 

 

 

你可能感兴趣的:(大数据,scala)