python 实现全球IP归属地查询工具

Python 实现全球IP归属地查询工具

前言

全球IP归属地查询工具是一个通过IP地址查询该IP地址所对应的地理位置的工具。在网络安全领域有着重要的应用,比如通过归属地查询来防止恶意攻击等。

准备工作

为了实现这个功能,我们需要使用到Python的第三方库pygeoip,这个库可以从IP地址中提取有价值的信息并且根据该IP地址获取该地址的归属地。我们可以使用以下命令来安装pygeoip库:

pip install pygeoip

实现过程

步骤1:导入第三方库

首先,我们需要导入 pygeoip 库以及代码所需的所有其他通用的库。

import pygeoip
import socket

步骤2:获取IP地址

接下来要做的就是获取要查询的 IP 地址。 简单的方法是从用户输入或从上一个页面获取输入数据,这超出了本讨论的范围。 在这里,我们将在代码中直接定义 IP 地址。

ipaddr = '14.215.177.38'

步骤3:加载归属地数据库

为了使用pygeoip库,我们还需要下载一个IP地址的数据库,然后将其加载到我们的代码中。你可以选择从以下链接下载 GeoIP 数据库:https://dev.maxmind.com/geoip/geoip2/geolite2/

这里我已经预先下载了数据库,并将其存储在当前目录下。pygeoip库中的GepIP类提供了实现该功能所需的方法。在命令行上使用以下命令:

gi = pygeoip.GeoIP("GeoLiteCity.dat", pygeoip.MEMORY_CACHE)

GeoIP类接收两个参数:一个数据库文件和一个缓存标志,该标志表明我们是否想要使用动态的内存缓存。 我们将使用默认值“MEMORY_CACHE”来启用内存缓存。

步骤4:通过IP地址获取信息

现在,我们将使用刚才创建的GeoIP对象获取关于 IP 地址的信息。 获得 IP 地址信息的代码如下:

def ip_query(ipaddr):
    try:
        rec = gi.record_by_addr(ipaddr)
        city = rec['city']
        country = rec['country_name']
        longitude = rec['longitude']
        latitude = rec['latitude']
        print(f"The IP address {ipaddr} is located in {city}, {country}, Longitude: {longitude}, Latitude: {latitude}")
    except Exception as e:
        print(e)

我们使用record_by_addr()方法获取归属地信息。该方法接收一个IP地址参数,并返回一个Python字典。接下来,我们只需从字典中获取所需的所有关键信息,包括归属城市、国家、经度和纬度,并解析为一个易于阅读的字符串。

示例

该示例将查询值为14.215.177.38的IP地址的归属地信息,然后将其作为字符串输出。

import pygeoip
import socket

ipaddr = '14.215.177.38'

gi = pygeoip.GeoIP("GeoLiteCity.dat", pygeoip.MEMORY_CACHE)

def ip_query(ipaddr):
    try:
        rec = gi.record_by_addr(ipaddr)
        city = rec['city']
        country = rec['country_name']
        longitude = rec['longitude']
        latitude = rec['latitude']
        print(f"The IP address {ipaddr} is located in {city}, {country}, Longitude: {longitude}, Latitude: {latitude}")
    except Exception as e:
        print(e)

ip_query(ipaddr)

输出结果:

The IP address 14.215.177.38 is located in Beijing, China, Longitude: 116.3972282409668, Latitude: 39.92890930175781

以下示例利用一个循环,查询多个IP地址的归属地信息:

import pygeoip

ipaddr_list = ['8.8.8.8', '202.40.16.3', '157.240.15.35', '14.215.177.38']
gi = pygeoip.GeoIP("GeoLiteCity.dat", pygeoip.MEMORY_CACHE)

def ip_query(ipaddr):
    try:
        rec = gi.record_by_addr(ipaddr)
        city = rec['city']
        country = rec['country_name']
        longitude = rec['longitude']
        latitude = rec['latitude']
        print(f"The IP address {ipaddr} is located in {city}, {country}, Longitude: {longitude}, Latitude: {latitude}")
    except Exception as e:
        print(e)

for ipaddr in ipaddr_list:
    ip_query(ipaddr)

输出结果:

The IP address 8.8.8.8 is located in Ashburn, United States, Longitude: -77.4728012084961, Latitude: 39.048099517822266
The IP address 202.40.16.3 is located in Beijing, China, Longitude: 116.3972282409668, Latitude: 39.92890930175781
The IP address 157.240.15.35 is located in Ashburn, United States, Longitude: -77.4728012084961, Latitude: 39.048099517822266
The IP address 14.215.177.38 is located in Beijing, China, Longitude: 116.3972282409668, Latitude: 39.92890930175781

以上就是基于 Python 实现全球IP归属地查询工具的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 实现全球IP归属地查询工具 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • python实现把二维列表变为一维列表的方法分析

    下面是“python实现把二维列表变为一维列表的方法分析”的完整攻略: 方法一:使用列表生成式 可以使用嵌套的列表生成式来将二维列表转换为一维列表。具体实现方法举例如下: 二维列表 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 一维列表 = [element for row in 二维列表 for element in row] p…

    python 2023年6月3日
    00
  • 利用pyecharts实现地图可视化的例子

    下面是利用pyecharts实现地图可视化的完整攻略。 简介 pyecharts是一个基于echarts制作图表的python库,支持多种类型的图表,包括但不限于折线图、散点图、地图等。 地图可视化是pyecharts中的一个重要应用,可以快速绘制各个国家和地区的地图,并支持数据可视化展示。 安装 安装pyecharts的方法如下: !pip install…

    python 2023年5月18日
    00
  • Tensorflow模型实现预测或识别单张图片

    下面是详细讲解 TensorFlow 模型实现预测或识别单张图片的完整攻略: 1. 准备数据 首先,我们需要准备数据,以用于训练模型和测试模型的准确性。如果你想训练一个分类模型,那么就需要准备分类数据集,一般来说是一些带有标签的图片。一个常用的分类数据集是 MNIST,包含了很多手写数字图片和对应的标签。也可以使用其他数据集,如 CIFAR-10、Image…

    python 2023年5月18日
    00
  • Python3如何对urllib和urllib2进行重构

    Python3中,urllib和urllib2均被合并到了一个名为urllib的包中,并且在使用上也有了一些更改,这就导致了在一些Python2项目的升级过程中,需要对urllib和urllib2进行重构。下面是对Python3对urllib、urllib2重构的完整攻略: 1. 使用前import 在使用urllib前需要import,import方式如下…

    python 2023年6月3日
    00
  • python 快速把超大txt文件转存为csv的实例

    下面是详细的讲解: 步骤一:读取txt文件并转换为二维列表 首先,我们需要使用Python中的内置函数打开并读取文本文件。在本示例中,建议使用with open()语句打开文件,以确保在读取完文件后关闭它。读取文件后,我们可以使用splitlines()方法分割文件中的所有行,并使用split()方法分割每一行的各项数据,最终形成一个二维列表。 在本示例中,…

    python 2023年6月3日
    00
  • python实现多线程并得到返回值的示例代码

    Python实现多线程并得到返回值是一个非常有用的技巧,可以提高程序的效率和性能。本攻略将介绍Python实现多线程并得到返回值的完整攻略,包括线程池、队列、锁等知识点和示例。 线程池 在Python中,我们可以使用线程池来实现多线程并发执行任务。以下是使用线程池实现多线程并得到返回值的示例代码: import concurrent.futures def …

    python 2023年5月15日
    00
  • python3实现常见的排序算法(示例代码)

    Python3实现常见的排序算法 排序算法是计算机科学中的基本算法之一,它可以将一组无序的数据按照一定的规则进行排序。在Python3中,可以使用多种算法来实现排序,包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。本文将详细讲解Python3实现常见的排序算法的完整攻略,包括算法原理、Python3实现过程和示例。 冒泡排序 冒泡排序是一种简单的排序…

    python 2023年5月13日
    00
  • 像线程一样管理进程的Python multiprocessing库

    Python multiprocessing库是一个用于并行处理的库,可以用于在多个CPU核心上执行任务,以提高程序的执行速度。用这个库可以实现像线程一样管理进程的效果。下面来介绍一下如何使用Python multiprocessing库来实现像线程一样管理进程的攻略。 使用Python multiprocessing库的步骤: 导入multiprocess…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部