首页 > 编程语言 >Python通过GeoIP获取IP信息(国家、城市、经纬度等)

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

时间:2023-05-12 20:22:25浏览次数:42  
标签:IP Python GeoIP 离线 com linux geoipupdate

前言

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.1.注册

访问 https://dev.maxmind.com/geoip/geolite2-free-geolocation-data
Maxmiand注册导航
点击"Sign Up for GeoLite2" 根据输入框进行注册
Maxmiand注册表单
注意邮箱一定要正确,注册后会发邮件进行确认及修改密码。
根据注册的用户名和修改后的密码登陆就可以直接下载离线包了。
Maxmind账号信息
点击"Download Databases"进入到下载页面,可以看到提供了CSV及mmdb两种格式的离线库包,最近的更新时间为2021年11月02日。
MaxmiandGeoLite2地址库下载
由于IP地址信息是经常有变化的,Maxmind提供了geoipupdate工具来更新离线地址包。

该工具使用需要申请账号和License Key。

1.2.申请License Key

还是通过刚注册的引导页面,点击“Generate a License Key”
Maxmind生成License导航页
进如到页面后,点击“Generate new license key”
Generate new license key
License Key生成确定页
点击确定以后就会生成账号及License key
License key生成

2.下载并配置geoipupdate

上文提到:IP地址信息是经常有变化的,Maxmind提供了geoipupdate工具来更新离线地址包。

https://github.com/maxmind/geoipupdate
这里有详细的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配置文件
geoipupdate目录
将执行命令拷贝到命令文件夹

cp geoipupdate /usr/local/bin/

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

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

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

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

通过定时任务定时执行geoipupdate命令,可以保证GGeoLite2-City.mmdb、GeoLite2-Country.mmdb两个离线库文件的定时更新。

执行geoipupdate命令,在目录下面产生了GeoLite2-City.mmdb、GeoLite2-Country.mmdb两个离线库文件。
GeoLite2离线库文件
创建Linux定时任务,每周自动更新一下离线库文件

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

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

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

1.pip安装geoip2

pip install geoip2

2.编写hello.py调用geoip2

vi hello.py

复制以下代码到hello.py

from flask import Flask
import geoip2.database

app = 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_json

if __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: production
   WARNING: 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信息
可以看到返回IP的国家、城市、经纬度等信息。

 

 

 

参考

标签:IP,Python,GeoIP,离线,com,linux,geoipupdate
From: https://www.cnblogs.com/sss4/p/17396211.html

相关文章

  • Python 执行 Shell命令
    方法一:os.system() os.system()可以说是最为基本的运行shell命令的方式了,这个方法的特点就是直接运行命令,并将运行之后的状态值返回码返回,所以结果是一个int类型,这个方式比较常见是运用在只需要执行shell命令而不需要得到命令的返回结果的场景。比如执行一个创建目录的......
  • 通过TOR绕过IP锁定
    1.1.前言平时做项目或者挖SRC的过程中,在遇到扫目录或者凑低危用户名枚举等会有大量请求的情况时,总有各种WAF出来拦截,而且通过各种方式还绕不掉,只能通过换IP的形式来进行绕过。本文就主要说明如何通过TOR实现动态IP的方式来绕过IP锁定机制。1.2.什么是TORTor(TheOnionRouter......
  • day02 编程语言与Python介绍
    昨日总结回顾第二节编程语言与Python介绍【一】引言基于上一节所学,有了计算机硬件,再在硬件之上安装好操作系统,我们就有了一个应用程序的运行平台,我们接下来的任务就是学习如何使用某款编程语言来开发应用程序。【二】编程语言分类【1】机器语言(1.1)什么是机器语言机器......
  • 水果识别系统python
    介绍水果识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对5种垃圾数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。效果展示演示视频和源码视频+代码:http......
  • fatal: detected dubious ownership in repository at 'D:/xxx'
     git的出现这个错误: 执行下面代码即可:gitconfig--global--addsafe.directory"*"; ......
  • 在python3.7+中优雅的使用dataclass
    [本文出自天外归云的博客园]在Python3.7+中,dataclasses是一个非常优雅的工具,可以轻松地创建简单的类,并自动生成常见的类方法,比如 __init__、__repr__ 等。以下是一些使用dataclasses时需要注意的事项:导入dataclasses模块在使用dataclasses之前,需要先导入datacla......
  • python进阶-虚拟环境
    python两个模块:os:Thismoduleprovidesaportablewayofusingoperatingsystemdependentfunctionality.这个模块提供了一种方便的使用操作系统函数的方法。sys:Thismoduleprovidesaccesstosomevariablesusedormaintainedbytheinterpreterandtofunction......
  • Python 文件大小(Byte)可读性转化(KB、MB、GB、TB)
    Python文件大小可读性转化file_size_exchange.py#!/usr/bin/envpython#-*-coding:utf-8-*-#@Time:2023/5/1217:52#@Software:PyCharm__author__="JentZhang"KB=1024MB=KB*KBGB=MB*KBTB=GB*KBdefformat_byte_repr(byte_num):&q......
  • Python-单引号、双引号和三引号的作用和区别
    (一)、作用 1.单引号:单引号内部为一串字符(str)。 2.双引号:双引号内部为一串字符,双引号内的字符串可以出现单引号(相当于双引号优先级更高),但不能嵌套双引号。 3.三引号:用于换行输出,且缩进会被打印出来。(三引号还可以用来进行块注释)。(二)、共同点python中变......
  • day02Python的初识
    第二节编程语言与Python介绍【一】引言基于上一节所学,有了计算机硬件,再在硬件之上安装好操作系统,我们就有了一个应用程序的运行平台,我们接下来的任务就是学习如何使用某款编程语言来开发应用程序。【二】编程语言分类【1】机器语言(1.1)什么是机器语言机器语言是站在计算......