IP地址信息是非常重要的情报信息,通过IP可以定位到该IP所在的国家、城市、经纬度等。
获取IP信息的方式有很多,很多服务商都提供了相应的地址库或API接口服务。
如国内的ipip.net,国外的ip-api.com、maxmind.com等。
很多公司都是使用Maxmind网站的IP信息库,里面包含着IP的详细信息,有付费的也有免费的,收费与免费的区别就是精准度和覆盖率。

本文介绍下载及定时更新Maxmind的离线库用python通过GeoIP来获取IP信息

一、下载GeoLite2离线地址库

1、注册及申请License Key

下载地址库之前先要在Maxmind网站注册同意相应的协议并登陆。

1)注册

访问 https://dev.maxmind.com/geoip/geolite2-free-geolocation-data

点击"Sign Up for GeoLite2" 根据输入框进行注册

注意邮箱一定要正确,注册后会发邮件进行确认及修改密码。
根据注册的用户名和修改后的密码登陆就可以直接下载离线包了。

点击"Download Databases"进入到下载页面,可以看到提供了CSV及mmdb两种格式的离线库包,最近的更新时间为2021年11月02日。

由于IP地址信息是经常有变化的,Maxmind提供了geoipupdate工具来更新离线地址包。该工具使用需要申请账号和License Key

2)申请License Key

还是通过刚注册的引导页面,点击“Generate a License Key”

进如到页面后,点击“Generate new license key”


点击确定以后就会生成账号及License key

2、下载并配置geoipupdate

https://github.com/maxmind/geoipupdate
这里有详细的安安装及配置说明

发行版本下载地址 https://github.com/maxmind/geoipupdate/releases

可以看到提供了各种平台的版本的下载链接,这里我们下载安装的是linux版本,点击下载“geoipupdate_4.8.0_linux_amd64.tar.gz”
在home目录下执行wget https://github.com/maxmind/geoipupdate/releases/download/v4.8.0/geoipupdate_4.8.0_linux_amd64.tar.gz 下载至home目录
tar -zxvf geoipupdate_4.8.0_linux_amd64.tar.gz 进行解压
cd geoipupdate_4.8.0_linux_amd64 目录执行ls -alh查看目录内容,发现有两个关键文件,一个是getipupdate命令执行文件,一个是GeoIP.conf配置文件

将执行命令拷贝到命令文件夹

cp geoipupdate /usr/local/bin/

geoipupdate命令读配置文件默认为/usr/local/etc/GeoIP.conf将配置文件拷贝到/usr/local/etc/下

cp GeoIP.conf /usr/local/etc/
vi /usr/local/etc/GeoIP.conf


如上图修改离线库文件目录及账号、LicenseKey,AccountID和LicenseKey就是开始在Maxmind网站上申请的。

3、运行geoipupdate命令并加入定时任务

执行geoipupdate命令,在目录下面产生了GeoLite2-City.mmdb、GeoLite2-Country.mmdb两个离线库文件。

创建Linux定时任务,每周自动更新一下离线库文件

crontab -e
0 0 * * 0 /usr/local/bin/geoipupdate

二、通过Python调用GeoIP获取IP信息

默认已经安装好了Flask环境,并激活了python虚拟环境。激活python虚拟环境安装Flask教程见http://xiejava.ishareread.com/posts/7f405b25/

1、安装geoip2

pip install geoip2

2、编写hello.py调用geoip2

vi hello.py

复制以下代码到hello.py

from flask import Flask
import geoip2.databaseapp = Flask(__name__)
reader=geoip2.database.Reader('/home/geoipupdate_4.8.0_linux_amd64/GeoLite2-City.mmdb')
@app.route("/")
def hello():return "Hello World!"@app.route("/getip/<ip>")
def getip(ip):ipinfo=reader.city(ip)ipinfo_json={'country':ipinfo.country.name,'city':ipinfo.city.name,'location':[ipinfo.location.longitude,ipinfo.location.latitude]}return ipinfo_jsonif __name__ == "__main__":app.run(host='0.0.0.0',port=8080)

3、运行hello.py

(flask_web) [root@localhost flask_web]# python hello.py* Serving Flask app 'hello' (lazy loading)* Environment: productionWARNING: This is a development server. Do not use it in a production deployment.Use a production WSGI server instead.* Debug mode: off* Running on all addresses.WARNING: This is a development server. Do not use it in a production deployment.* Running on http://192.168.1.18:8080/ (Press CTRL+C to quit)

注意:如果linux开启了防火墙请关闭防火墙,或放开192.168.1.18

4、验证

通过浏览器访问 http://192.168.1.18:8080/getip/128.101.101.101

可以看到返回IP的国家、城市、经纬度等信息。

至此,本文介绍了如何注册并下载GeoIP离线数据包,并通过官方提供的geoipupdate进行定期更新数据。还介绍了如何通过Python调用GeoIP获取IP信息。

作者博客:http://xiejava.ishareread.com/

Python通过GeoIP获取IP信息(国家、城市、经纬度等)相关推荐

  1. python,ffprobe获取视频信息

    背景 需要获取视频基础信息,如果分辨率.大小.播放时长等,研究发现ffprobe工具已经提供了非常全面的视频信息,用ffprobe分析视频很简单,且看我是怎么在python码中调用ffprobe来提取 ...

  2. 8021x 获取IP信息失败,请检查锐捷认证客户端当前配置是否符合所在网络的要求,检查完毕后尝试重新认证

    早上一起床,登陆锐捷客户端上网,谁知道错问题了.不能联网了,锐捷登陆成功,但是一会儿就提示失败,获取IP信息失败了.下面我描述一下问题原因: 锐捷登陆后有认证提示,和往常正常情况一样的,不过有个小感叹 ...

  3. python图片修改过、有原图、怎么得到改动的地方_微信发照片原图会泄露行踪?手把手教会你如何用 Python 通过图片获取用户信息!...

    原标题:微信发照片原图会泄露行踪?手把手教会你如何用 Python 通过图片获取用户信息! 前言 有媒体曝出,微信发原图或存在泄露位置信息的风险. 对此,腾讯微信团队微博 12 月 1 日发布声明称, ...

  4. 手把手教你使用Python网络爬虫获取招聘信息

    1.前言 现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息.可是招聘信息有一些是错综复杂的.而且不能把全部的信息全部罗列出来,以外卖的58招聘网站来看,资料整理的不清晰. ...

  5. express 获取ip地址,并获取ip对应的城市名

    1.安装 express-ip 中间件 npm install express-ip --save-dev yarn add express-ip --save-dev 2.app.js引入并注册 头 ...

  6. python+shell 批量获取服务器信息并且生成excel表

    我们工作中,经常需要获取服务器的一些信息,包括软件的和硬件的.例如刚刚接收的服务器,需要批量获取信息确认硬件配置是否符合我们需求,或者维护很长时间的服务器,中间变动了很多,但是服务器信息没有更改,这个 ...

  7. python中traceback获取异常信息

    在日常工作中,我们常常会碰到异常,我们想在异常发生的时候,不但能显示异常发生的位置,还能看到异常方法被调用的堆栈信息,在python中怎么实现呢? 实际上python提供了一个traceback来实现 ...

  8. python使用POP3获取邮件信息

    一. 前言 曾经写过一篇利用python库SMTP发送邮箱以控制电脑的文章, 文章链接点击这里 现在回头看, 有很多做的不完美的地方, 其中最重要的点是无法主动控制电脑, 只能被动地等待程序触发某个条 ...

  9. python编写随机获取ip免费调用有道翻译

    ip:代理安装: 环境docker docker-compose 1.git clone https://github.com/Python3WebSpider/ProxyPool.git 2.cd ...

最新文章

  1. MySQL CHAR、VARCHAR、TEXT、ENUM、SET(字符串类型)
  2. java同名类_java两个不同名类 在里面建立两个同名的类 怎么破
  3. 通过非docker的方式进行RocketMQ的安装
  4. 经典正则表达式(转)
  5. Java 是如何优雅地实现接口数据校验的?
  6. 在线图片转base64工具
  7. java ehcache手动关闭_java – 如何为测试目的关闭ehcache
  8. 第六章 静电场中的导体和电介质
  9. hosts文件修改,文件类型修改
  10. 压缩文件解压密码破解之fcrackzip
  11. oracle为什么主键不唯一,Oracle GoldenGate 针对表没有主键或唯一索引的解决方案
  12. 2020年下半年湖北软考报名通知
  13. 微软Hyper-V虚拟机复制实现双机备份过程
  14. 方舟手游非官方服务器修改器,方舟非官方服务器作弊码 | 手游网游页游攻略大全...
  15. [医学图像分割综述] Medical Image Segmentation Using Deep Learning: A Survey
  16. 网站推荐:archimy.com 在线函数图象绘制
  17. 从5个维度来看C语言指针(指针就是个纸老虎)
  18. 浅谈Everdroid流程化机器人设计器
  19. java生日贺卡,简单生日贺卡制作,涨知识了
  20. unresolved external symbol __imp__timeGetTime@0

热门文章

  1. [GZip 头中的幻数不正确。请确保正在传入 GZip 流]的出错原因之一
  2. 1047: 字母编号
  3. 到底是什么原因,让你家孩子眼睛变近视了?
  4. 基于Next.js搭建基本可用于项目开发的过程
  5. IP地址基本概念及划分为A、B、C三类地址
  6. springboot冬奥会竞赛项目知识网站的设计与实现毕业设计源码152337
  7. 2021-01-14 Android系统修改出厂默认语言
  8. 批量移动指定文件至指定文件夹
  9. 【数据销毁】数据安全领域的重要分支
  10. mariadb登陆异常_ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘XXX‘ (111)