win10和Centos下 python +ip2region 离线IP库地址文件实现秒级查询ip归属地址

ip2region
ip2region - 最自由的ip地址查询库,ip到地区的映射库,提供Binary,B树和纯内存三种查询算法,妈妈再也不用担心我的ip地址定位。
支持Java,PHP,C,Python,Nodejs,Golang,C#等语言,本文以Python为例
背景:
百度大部分文章也未找到在windows下的运行方式,所以决定自己动手,丰衣足食。

一、win10操作步骤

  1. 在浏览器进入以下链接,下载源文件
    https://github.com/lionsoul2014/ip2region
    win10和Centos下 python +ip2region 离线IP库地址文件实现秒级查询ip归属地址_第1张图片
    下载完的文件:
    在这里插入图片描述

  2. 解压文件
    在这里插入图片描述

  3. 为方便操作,创建一个自己的文件夹
    在这里插入图片描述

  4. 打开刚才解压的文件夹,把data文件夹和binding/binding目录下的ip2Region.py复制到自己的文件夹下
    win10和Centos下 python +ip2region 离线IP库地址文件实现秒级查询ip归属地址_第2张图片
    win10和Centos下 python +ip2region 离线IP库地址文件实现秒级查询ip归属地址_第3张图片
    复制完后的效果:win10和Centos下 python +ip2region 离线IP库地址文件实现秒级查询ip归属地址_第4张图片

  5. 创建py文件searcher.py
    在这里插入图片描述

  6. 复制以下代码到searcher.py

    import struct, sys, os, time
    from ip2Region import Ip2Region
    result_file_path = './result_file.txt' #结果文件保存路径
    dbFile = './data/ip2region.db'  #数据库文件路径
    def testSearch():
        llen = len(sys.argv)
        if llen < 2:
            print ("用法: python searcher.py [源文件路径]")
            print ("Algorithm: binary or b-tree")
            return 0
        method    = 1
        algorithm = "b-tree"
        search_file = sys.argv[1]
    
        if (not os.path.isfile(dbFile)) or (not os.path.exists(dbFile)):
            print ("[错误]:数据库文件不存在。")
            return 0
        if (not os.path.isfile(search_file)) or (not os.path.exists(search_file)):
            print("查询文件不存在")
            return 0
    
        if llen > 2:
            algorithm = sys.argv[2]
            if algorithm == "binary":
                method = 2
            elif algorithm == "memory":
                method = 3
    
        searcher = Ip2Region(dbFile)
        with open(search_file,"rt",encoding='utf-8') as f:
            with open(result_file_path,'a',encoding='utf-8') as rf:
                for line in f:
                    line = line.strip()
                    if line == "":
                        print("[错误]:无效的IP地址。")
                        continue
    
                    if line == "quit" or line == "exit":
                        print("[信息]:谢谢你的使用,再见。")
                        break
    
                    if not searcher.isip(line):
                        print("[错误]:无效的IP地址。")
                        continue
    
                    #sTime = time.time() * 1000
                    if method == 1:
                        data = searcher.btreeSearch(line)
                    elif method == 2:
                        data = searcher.binarySearch(line)
                    else:
                        data = searcher.memorySearch(line)
                    if isinstance(data, dict):
                        rf.write("%s|%s\n" % (line, data["region"].decode('utf-8')))
                        print("%s|%s" % (line, data["region"].decode('utf-8')))
                    else:
                        rf.write("%s|\n" % (line,))
                        print("[错误]: 错误数据", data)
        searcher.close()
    
    if __name__ == "__main__":
        testSearch()
    
  7. 把需要查询的文件复制进来
    win10和Centos下 python +ip2region 离线IP库地址文件实现秒级查询ip归属地址_第5张图片
    win10和Centos下 python +ip2region 离线IP库地址文件实现秒级查询ip归属地址_第6张图片

  8. 命令行执行脚本:python searcher.py [源文件路径]
    python searcher.py ./ip.txt

  9. 数据返回格式
    ip | 国家 | 城市标识 | 省份 | 城市 | ISP

二、Centos下操作

  1. 下载文件
    wget https://github.com/lionsoul2014/ip2region/archive/master.zip

  2. 解压
    unzip master.zip

  3. 创建searcher.py文件并把上边的代码放进去

  4. 把此脚本放到**/ip2region-master/binding/python**文件夹下

  5. 修改数据库文件路径(根据自身情况修改,最好使用绝对路径)
    win10和Centos下 python +ip2region 离线IP库地址文件实现秒级查询ip归属地址_第7张图片

  6. 命令行执行脚本:python searcher.py [源文件路径]

三、参考链接

  1. https://github.com/lionsoul2014/ip2region
  2. https://blog.51cto.com/wujianwei/2123493

你可能感兴趣的:(工具)