强大的IP地址定位库--ip2region 的初步使用

2019年05月05日 开源的IP 地址定位库 ip2region 1.9.0 发布了,功能还是很不错的,下面我就应用下ip2region,来解析ip的地址

一、下载ip库并解压
地址为:https://github.com/lionsoul2014/ip2region/archive/v1.9.0-release.tar.gz
解压

把ip2region.db粘贴到我们maven工程的resources下

二、添加ip2region依赖

<dependency>
            <groupId>org.lionsoul</groupId>
            <artifactId>ip2region</artifactId>
            <version>1.7.2</version>
</dependency>

三、实现IPUtil工具类

import java.io.File;
import java.lang.reflect.Method;

import org.lionsoul.ip2region.DataBlock;
import org.lionsoul.ip2region.DbConfig;
import org.lionsoul.ip2region.DbSearcher;
import org.lionsoul.ip2region.Util;

public class IPUtil {
    public static String getCityInfo(String ip){
    //db
    String dbPath = IPUtil.class.getResource("/ip2region.db").getPath();

    File file = new File(dbPath);

        if ( file.exists() == false ) {
        System.out.println("Error: Invalid ip2region.db file");
    }

    //查询算法
    int algorithm = DbSearcher.BTREE_ALGORITHM; //B-tree
    //DbSearcher.BINARY_ALGORITHM //Binary
    //DbSearcher.MEMORY_ALGORITYM //Memory
        try {
        DbConfig config = new DbConfig();
        DbSearcher searcher = new DbSearcher(config, dbPath);

        //define the method
        Method method = null;
        switch ( algorithm )
        {
            case DbSearcher.BTREE_ALGORITHM:
                method = searcher.getClass().getMethod("btreeSearch", String.class);
                break;
            case DbSearcher.BINARY_ALGORITHM:
                method = searcher.getClass().getMethod("binarySearch", String.class);
                break;
            case DbSearcher.MEMORY_ALGORITYM:
                method = searcher.getClass().getMethod("memorySearch", String.class);
                break;
        }

        DataBlock dataBlock = null;
        if ( Util.isIpAddress(ip) == false ) {
            System.out.println("Error: Invalid ip address");
        }

        dataBlock  = (DataBlock) method.invoke(searcher, ip);

        return dataBlock.getRegion();

    } catch (Exception e) {
        e.printStackTrace();
    }

        return null;
}

}

四、测试
这里我是用的Junit进行单元测试,你也可以自己写个main方法测试即可
添加junit依赖

<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
</dependency>

编写测试类

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class IPUtilTest {
    private IPUtil ipUtil;

    @Before
    public void setUp(){
        ipUtil=new IPUtil();
    }
    @After
    public void tearDown(){
        ipUtil=null;
    }
    @Test
    public void getCityInfo(){
        String ip = "220.248.12.158";
        System.out.println(ipUtil.getCityInfo(ip));
    }
}


总结:很方便,其实我觉得比纯真的要好多了~

原文地址:https://blog.51cto.com/14309075/2390060

时间: 2024-08-29 15:57:07

强大的IP地址定位库--ip2region 的初步使用的相关文章

ip地址定位库

ip2region 1.2.1 发布了,新增 Python 内存查询+数据文件更新. 准确率99.9%的ip地址定位库,0.0x毫秒级查询,数据库文件大小只有1.5M,提供了java, php, c, python, nodejs查询绑定和Binary,B树,内存三种查询算法,妈妈再也不用担心我的ip地址定位! 1.2.1更新内容如下: 1,python查询客户端增加内存查询模式. 2,数据更新至2016/07/12版本,届时ip2region.db文件大小1.6M. 版本仓库地址: http:

获取客户端IP地址定位城市信息

获取客户端IP地址定位城市信息 1.首先获取客户端的IP地址 function getIPaddress(){ $IPaddress=''; if (isset($_SERVER)){ if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ $IPaddress = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if (isset($_SERVER["HTTP_CLIENT_IP&qu

QT通过IP地址定位地址(用get方法取数据)

通过IP地址定位地址,是要通过查询数据库,如果自己做一个这样的数据库工作量就比较大,所以在网上找了一个查询IP地址的网址,通过调用这个网址查询来实现,但是这个有一定的弊端,如果没有网络或者这个网址不可用时,就无法查询.具体代码如下: QEventLoop loop; QNetworkAccessManager manager;    QNetworkReply *pReply = manager.get(QNetworkRequest(QUrl("http://www.ip38.com/&quo

实用技巧:如何通过IP地址进行精准定位

在甲方工作的朋友可能会遇到这样的问题,服务器或者系统经常被扫描,通过IP地址我们只能查到某一个市级城市,如下图: 当我们想具体到街道甚至门牌号,该怎么办??? 偶然间发现百度地图有高精度IP定位API的接口,通过该接口我们可以通过IP地址定位到具体的地理位置,甚至能精确到门牌号及周围的标志性建筑.该接口的说明地址为:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip 若想要使用该接口进行查询,必须先申请一个密钥(AK),如下图:

JAVA根据IP地址获取详细的地域信息

在系统中网站的头部一般都有显示是哪个城市的用户进入到网站的首页后默认城市应该是用户本地的城市信息例如北京网站就要根据你的IP地址的信息查询数据获取北京部分的数据呵呵当然我可能描述的不是很清楚但是可以理解成通过IP地址定位地理信息就行.很多人现在使用以QQ数据库为基础获取地址信息但不完整.而且不规范.互联网提供很多其他接口可以完成这项功能. 接口如下 通过淘宝IP地址库获取IP位置 1. 请求接口GEThttp://ip.taobao.com/service/getIpInfo.php?ip=[i

PHP获取客户端IP地址

获取用户的iIP,我们就可以根据IP地址定位. 您的IP地址是:219.140.188.110  湖北省武汉市, 电信 <?php error_reporting (E_ERROR | E_WARNING | E_PARSE);if($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]){$ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];}elseif($HTTP_SERVER_VAR

SVN版本库修改URL路径或者IP地址

服务器的IP地址或者URL变更,版本库服务器的IP也要修改,因为当初安装SVN URL没有使用别名,所以使用的人都要修改客户端的IP,以下是参考网上的资料. 1.Windows TortoiseSVN客户端: 在工作复本的根目录上右键->TortoiseSVN->重新定位(Relocate),然后修改URL, 2.Mac OS或Linux客户端: svn sw --relocate svn://old_ip/目录 svn://new_ip/目录

解析纯真IP地址库

一周以来,一直在做 IP地址库的解析.从调研到编码到优化,大概花了有七八天的时间.感觉很好玩.总结一下整个做的过程. 1.关于IP 地址库的解析方式 目前主要的解析方式有两种:通过API,或通过IP数据库. API方式很简单,目前国内大厂不少提供API接口,只要发送请求的IP,就能获得相应的地理位置.像BAT等等公司都提供IP查询接口.这种解析方式的好处在于,编码简单,一个请求获得数据,然后解析一下就好了(通常只是个json数据),而且不用维护数据库,对本地没有负担.但是缺点也挺明显的,首先是慢

【Python】 http客户端库requests &amp; urllib2 以及ip地址处理IPy

requests requests是个HTTPClient库,相比于urllib,urllib2等模块比更加简洁易用 ■ get请求 作为示例,讲一下关于requests如何发起并处理一个get请求 r = requests.get("http://www.baidu.com") #可以加入timeout参数来设置超时 r是一个Response对象,可以用r查看很多信息 如r.status_code 查看本次请求的http返回码 r.headers 头部信息(是个类字典对象) r.ur