首页 > 编程语言 >Python通过Geoip解析IP地址信息

Python通过Geoip解析IP地址信息

时间:2024-05-17 11:31:43浏览次数:24  
标签:__ Python Geoip IP地址 地址 ip 解析 response 0.0

最近在研究ELK日志分析系统,在分析haproxy日志时,考虑需要将haproxy内获取到的IP地址进行解析,网站访问情况。于是有了这么一个需求,奈何maxmind数据库有些不准确,于是衍生出了一个想法, 要测试maxmind数据库的准确性。于是乎想到了一个简单的方法,利用python脚本来配置geoip数据库来解析地址,来筛选较为正确的地址库用于elk系统。

准备条件

  • 一台Linux系统,系统内安装有python3
  • python3有安装如下插件
apt install -y python3-pip
pip3 install Flask
pip3 install geoip2

注册账号后就可以免费下载

代码准备

from flask import Flask, request
from geoip2 import database
import re

app = Flask(__name__)

# 假设 GeoLite2-City.mmdb 文件位于 /root/ge01/ 目录下
reader = database.Reader('/root/ge01/GeoLite2-City.mmdb')

# 定义内网地址的正则表达式
INTERNAL_IP_PATTERN = r'^(127\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.|192\.168\.)'

@app.route('/')
def index():
    return 'Welcome to the IP Address Recognition Website!'

@app.route('/<ip>')
def get_ip_info(ip):
    # 检查 IP 是否为内网地址
    if re.match(INTERNAL_IP_PATTERN, ip):
        return '局域网地址'
    else:
        try:
            response = reader.city(ip)
            country = response.country.name
            subdivisions =  response.subdivisions.most_specific.name
            city = response.city.name
            latitude = response.location.latitude
            longitude = response.location.longitude
            return f"网络地址: {ip}<br>国家: {country}<br>省份: {subdivisions}<br>城市: {city}<br>纬度: {latitude}<br>经度: {longitude}"
        except Exception as e:
            return f"Error: {str(e)}"

if __name__ == '__main__':
    # 注意:在生产环境中,不建议将 Flask 应用直接运行在 host='0.0.0.0' 和 port=80 上
    # 因为这可能需要额外的配置和安全考虑。这里仅为示例。
    app.run(host='0.0.0.0', port=80)

代码运行

root@MaxMind:~# python3 ip.py 
 * Serving Flask app 'ip'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:80
 * Running on http://192.168.1.10:80
Press CTRL+C to quit

查询IP地址信息

本次测试拿的是阿里DNS公网地址进行测试,可以完美的显示出地址的详细信息,唯一的缺点就是这个现实为英文

  • 解析公网地址情况
  • 解析国外地址情况
  • 解析内网IP情况

标签:__,Python,Geoip,IP地址,地址,ip,解析,response,0.0
From: https://www.cnblogs.com/amsilence/p/18197520

相关文章

  • python测试postgres远程登录
    #首先安装psycopg2模块importpsycopg2 #配置数据库连接参数conn_params={"dbname":"your_db","user":"your_user","password":"your_password","host":"your_host","port":&......
  • python爬虫基础
    前言Python非常适合用来开发网页爬虫,理由如下:1、抓取网页本身的接口相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib包提供了较为完整的访问网页文档的API。(当然ruby也是很好的选择)此外,抓取网页有时候需要模......
  • Python数据分析与挖掘实战(1-3章)
    非原创,仅个人关于《Python数据分析与挖掘实战》的学习笔记第一章基础略第二章数据分析简介基本概念元组、列表、字典、集合函数式编程:map()函数:定义一个函数,然后用map()逐一应用到map列表中的每个元素。map(lambdax+2:a)reduce()函数:用于递归计算。reduce(lambdax,......
  • 如何使用Python和Plotly绘制3D图形
    本文分享自华为云社区《Plotly绘制3D图形》,作者:柠檬味拥抱。在数据可视化领域,三维图形是一种强大的工具,可以展示数据之间的复杂关系和结构。Python语言拥有丰富的数据可视化库,其中Plotly是一款流行的工具,提供了绘制高质量三维图形的功能。本文将介绍如何使用Python和Plotly来绘......
  • python折线图包括设置横纵坐标字体大小刻度间隔等
    直径上代码#!usr/bin/envpython#-*-coding:utf-8-*-"""@author:Suyue@file:dryzhexian.py@time:2024/05/16@desc:"""importpandasaspdimportmatplotlibimportmatplotlib.pyplotaspltimportmatplotlib.tickerasticker......
  • Python03判断语句
    Python03判断语句比较运算符if语句......
  • Python进阶之实现单例模式的常见方法
    【一】单例模式介绍【1】什么是单例模式一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式【2】为什么要学单例模式当一个类的功能比较单一,只需要一个实例对象就可以完成需求时,就可以使用单例模式来节省内存资源【3】......
  • Python 类
    类的特殊方法call假设我们有一个类Calculator,它有一个__call__方法,用来计算两个数的和。代码如下:classCalculator:def__call__(self,a,b):returna+bcalc=Calculator()result=calc(3,5)print(result)在这个例子中,我们定义了一个Calculator类,其......
  • Python中解压一个包含中文文件名的ZIP文件到指定的目录
    要在Python中解压一个包含中文文件名的ZIP文件到指定的目录,你可以指定解压文件时所需的字符编码。下面是一个示例代码:importzipfileimportoszip_file_path='/path/to/your/chinese_file.zip'extract_dir='/path/to/extract/directory'#创建一个解压目标目录os.make......
  • python 逆向
    python逆向也是CTFreverse的一个重要组成部分(废话)。题目一般会给一个exe文件或者pyc文件。工具工欲善其事,必先利其器,好的工具是必不可少的。exe转pyc工具:GitHub-WithSecureLabs/python-exe-unpacker:AhelperscriptforunpackinganddecompilingEXEsco......