Python通过GeoIP获取IP信息(国家、城市、经纬度等)
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信息(国家、城市、经纬度等)相关推荐
- python,ffprobe获取视频信息
背景 需要获取视频基础信息,如果分辨率.大小.播放时长等,研究发现ffprobe工具已经提供了非常全面的视频信息,用ffprobe分析视频很简单,且看我是怎么在python码中调用ffprobe来提取 ...
- 8021x 获取IP信息失败,请检查锐捷认证客户端当前配置是否符合所在网络的要求,检查完毕后尝试重新认证
早上一起床,登陆锐捷客户端上网,谁知道错问题了.不能联网了,锐捷登陆成功,但是一会儿就提示失败,获取IP信息失败了.下面我描述一下问题原因: 锐捷登陆后有认证提示,和往常正常情况一样的,不过有个小感叹 ...
- python图片修改过、有原图、怎么得到改动的地方_微信发照片原图会泄露行踪?手把手教会你如何用 Python 通过图片获取用户信息!...
原标题:微信发照片原图会泄露行踪?手把手教会你如何用 Python 通过图片获取用户信息! 前言 有媒体曝出,微信发原图或存在泄露位置信息的风险. 对此,腾讯微信团队微博 12 月 1 日发布声明称, ...
- 手把手教你使用Python网络爬虫获取招聘信息
1.前言 现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息.可是招聘信息有一些是错综复杂的.而且不能把全部的信息全部罗列出来,以外卖的58招聘网站来看,资料整理的不清晰. ...
- express 获取ip地址,并获取ip对应的城市名
1.安装 express-ip 中间件 npm install express-ip --save-dev yarn add express-ip --save-dev 2.app.js引入并注册 头 ...
- python+shell 批量获取服务器信息并且生成excel表
我们工作中,经常需要获取服务器的一些信息,包括软件的和硬件的.例如刚刚接收的服务器,需要批量获取信息确认硬件配置是否符合我们需求,或者维护很长时间的服务器,中间变动了很多,但是服务器信息没有更改,这个 ...
- python中traceback获取异常信息
在日常工作中,我们常常会碰到异常,我们想在异常发生的时候,不但能显示异常发生的位置,还能看到异常方法被调用的堆栈信息,在python中怎么实现呢? 实际上python提供了一个traceback来实现 ...
- python使用POP3获取邮件信息
一. 前言 曾经写过一篇利用python库SMTP发送邮箱以控制电脑的文章, 文章链接点击这里 现在回头看, 有很多做的不完美的地方, 其中最重要的点是无法主动控制电脑, 只能被动地等待程序触发某个条 ...
- python编写随机获取ip免费调用有道翻译
ip:代理安装: 环境docker docker-compose 1.git clone https://github.com/Python3WebSpider/ProxyPool.git 2.cd ...
最新文章
- MySQL CHAR、VARCHAR、TEXT、ENUM、SET(字符串类型)
- java同名类_java两个不同名类 在里面建立两个同名的类 怎么破
- 通过非docker的方式进行RocketMQ的安装
- 经典正则表达式(转)
- Java 是如何优雅地实现接口数据校验的?
- 在线图片转base64工具
- java ehcache手动关闭_java – 如何为测试目的关闭ehcache
- 第六章 静电场中的导体和电介质
- hosts文件修改,文件类型修改
- 压缩文件解压密码破解之fcrackzip
- oracle为什么主键不唯一,Oracle GoldenGate 针对表没有主键或唯一索引的解决方案
- 2020年下半年湖北软考报名通知
- 微软Hyper-V虚拟机复制实现双机备份过程
- 方舟手游非官方服务器修改器,方舟非官方服务器作弊码 | 手游网游页游攻略大全...
- [医学图像分割综述] Medical Image Segmentation Using Deep Learning: A Survey
- 网站推荐:archimy.com 在线函数图象绘制
- 从5个维度来看C语言指针(指针就是个纸老虎)
- 浅谈Everdroid流程化机器人设计器
- java生日贺卡,简单生日贺卡制作,涨知识了
- unresolved external symbol __imp__timeGetTime@0
热门文章
- [GZip 头中的幻数不正确。请确保正在传入 GZip 流]的出错原因之一
- 1047: 字母编号
- 到底是什么原因,让你家孩子眼睛变近视了?
- 基于Next.js搭建基本可用于项目开发的过程
- IP地址基本概念及划分为A、B、C三类地址
- springboot冬奥会竞赛项目知识网站的设计与实现毕业设计源码152337
- 2021-01-14 Android系统修改出厂默认语言
- 批量移动指定文件至指定文件夹
- 【数据销毁】数据安全领域的重要分支
- mariadb登陆异常_ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘XXX‘ (111)