Java通过GeoLite2-City.mmdb进行IP信息查询地理定位和经纬度

GeoLite2可以离线使用,而且数据还具有丰富性。之前用纯真网下载下来的静态库,但是感觉有些笨重(需要搞一个本地的数据库,把数据先储存到数据库有兴趣的小伙伴可以玩玩)数据库脚本下载地址:下载地址,包含50多万个公网IP和对应的城市,运营商(不建议,读取时间稍微有点长)

这里着重讲解的是通过GeoLite2-City.mmdb获取IP的信息的,

使用DatabaseReader.Builder读取GeoLite2数据库即可。

GeoLite2-City.mmdb静态文件下载地址:下载地址

话不多说,直接上代码

引入依赖

<dependency>
    <groupId>com.maxmind.geoip2</groupId>
    <artifactId>geoip2</artifactId>
    <version>2.15.0</version>
</dependency>

编写函数 以及调用函数

public class GeoLite2 {

    public static File file = new File("");


    private static GeoLite2 GetAddress;
    /**
     *
     * @description: 获得国家
     * @param reader GeoLite2 数据库
     * @param ip 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 GeoLite2 数据库
     * @param ip 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 GeoLite2 数据库
     * @param ip 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 GeoLite2 数据库
     * @param ip ip地址
     * @return
     * @throws Exception
     */
    public static Double getLongitude(DatabaseReader reader, String ip) throws Exception {
        return reader.city(InetAddress.getByName(ip)).getLocation().getLongitude();
    }

    /**
     *
     * @description: 获得纬度
     * @param reader GeoLite2 数据库
     * @param ip ip地址
     * @return
     * @throws Exception
     */
    public static Double getLatitude(DatabaseReader reader, String ip) throws Exception {
        return reader.city(InetAddress.getByName(ip)).getLocation().getLatitude();
    }

    public static void main(String[] args) throws Exception {
        System.out.println(new Date().getTime());
        // 创建 GeoLite2 数据库
        ///Users/apple/Desktop/GeoLite2-City.mmdb ,文件的存放路径
        //Windows环境切换到自己的文件存放路径即可
        File file = new File("/Users/apple/Desktop/GeoLite2-City.mmdb");
        // 读取数据库内容
        DatabaseReader reader = new DatabaseReader.Builder(file).build();
        // 访问IP
        String ip = "14.5.6.2";
        String site = "国家:"+GetAddress.getCountry(reader, ip) + "\n省份:" + GetAddress.getProvince(reader, ip) + "\n城市:" + GetAddress.getCity(reader, ip)+ "\n经度:" + GetAddress.getLongitude(reader, ip)+ "\n纬度:" + GetAddress.getLatitude(reader, ip);
        System.out.println(site);
        System.out.println(new Date().getTime());
    }
}

打印结果

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: geolite2-city.mmdb是一个数据库文件,用于通过IP地址获取地理位置信息Java库。 GeoLite2-City.mmdb是由MaxMind开发的一个IP地理位置库。它基于IP地址段与地理位置之间的映射关系,提供了一个精确的地理位置数据库。 Java是一种通用的面向对象的编程语言,也是一种非常流行的编程语言之一。Java有许多用于处理文件和数据库的库,包括用于读取和解析数据库文件的工具。 geolite2-city.mmdb java是一个特定的Java库,它可以与GeoLite2-City.mmdb文件一起使用,以便在Java应用程序中方便地使用地理位置信息。这个库允许开发人员根据IP地址检索地理位置信息,例如国家、城市、邮政编码、经纬度等。 通过使用geolite2-city.mmdb java库,开发人员可以轻松地实现IP地址到地理位置的映射功能。它可以帮助开发人员实现一些常见的功能,比如根据用户IP地址显示用户所在地区的特定内容,或者根据用户地理位置来提供定制化的服务。 总之,geolite2-city.mmdb java是一个用于处理GeoLite2-City地理位置数据库文件的Java库,它可以帮助开发人员在Java应用程序中实现方便的地理位置信息处理功能。 ### 回答2: geolite2-city.mmdb是一个用于Java编程语言的库,用于将IP地址映射到对应的城市信息。这个库在处理大量的IP地址时非常有用,它可以从IP地址中提取出国家、地区、城市、经纬度信息,帮助开发人员进行定位地理信息相关的应用开发。 在Java中使用geolite2-city.mmdb库非常简单。首先,我们需要将库文件导入到项目中,通常是把它放在项目的资源文件夹中。然后,我们可以通过以下几个步骤来使用这个库: 1. 创建一个DatabaseReader对象:这个对象是库的核心类,用于读取和查询IP地址对应的城市信息。 ```java File database = new File("path/to/geolite2-city.mmdb"); DatabaseReader reader = new DatabaseReader.Builder(database).build(); ``` 2. 查询IP地址对应的城市信息:可以通过调用DatabaseReader对象的`city()`方法来查询。 ```java InetAddress ipAddress = InetAddress.getByName("192.168.0.1"); CityResponse response = reader.city(ipAddress); ``` 3. 获取城市信息:可以从CityResponse对象中获取城市、地区、国家、经纬度信息。 ```java Country country = response.getCountry(); Subdivision subdivision = response.getMostSpecificSubdivision(); City city = response.getCity(); Location location = response.getLocation(); String countryName = country.getName(); String countryCode = country.getIsoCode(); String cityName = city.getName(); double latitude = location.getLatitude(); double longitude = location.getLongitude(); ``` 这样,我们就可以在Java程序中使用geolite2-city.mmdb库来获取IP地址对应的城市信息了。这对于各种需要根据地理位置进行业务逻辑的应用程序非常有用,比如根据用户IP地址显示对应的语言、区域设置、增强安全验证等。 ### 回答3: GeoLite2-City.mmdb是一个由MaxMind提供的免费地理位置数据库,它用于将IP地址与对应的地理位置信息进行匹配。它采用了MMDB(MaxMind DB)文件格式,这是一种用于高性能IP地址查找的数据库格式。 在Java中使用GeoLite2-City.mmdb文件,我们可以利用MaxMind提供的Java API来实现IP地址与地理位置的查询。首先,我们需要将.mmdb文件加载到我们的Java应用程序中。可以使用MaxMind提供的Java API的`DatabaseReader.Builder`类来加载.mmdb文件,然后使用其`build()`方法来创建一个`DatabaseReader`对象。 一旦我们有了`DatabaseReader`对象,就可以使用它的`get()`方法来查询特定IP地址的地理位置信息。这个方法接受一个`InetAddress`对象作为参数,并返回一个`CityResponse`对象。通过`CityResponse`对象,我们可以获取查询IP地址的国家、省/州、城市、经度和纬度等详细信息。 下面是一个简单的Java代码示例,演示了如何使用GeoLite2-City.mmdb文件进行地理位置查询: ```java import com.maxmind.geoip2.DatabaseReader; import com.maxmind.geoip2.model.CityResponse; import java.io.File; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; public class GeoLite2CityExample { public static void main(String[] args) { File database = new File("/path/to/GeoLite2-City.mmdb"); try (DatabaseReader reader = new DatabaseReader.Builder(database).build()) { InetAddress ipAddress = InetAddress.getByName("8.8.8.8"); CityResponse response = reader.city(ipAddress); String countryName = response.getCountry().getName(); String cityName = response.getCity().getName(); String latitude = response.getLocation().getLatitude().toString(); String longitude = response.getLocation().getLongitude().toString(); System.out.println("Country: " + countryName); System.out.println("City: " + cityName); System.out.println("Latitude: " + latitude); System.out.println("Longitude: " + longitude); } catch (IOException | UnknownHostException e) { e.printStackTrace(); } } } ``` 以上代码将输出查询IP地址的国家、城市、经度和纬度信息。可以根据自己的需求,进一步扩展代码以适应不同的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值