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

yizhihongxing

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中Genarator函数用法分析

    Python中Generator函数用法分析 Generator函数是Python中非常强大的一种类型,可以帮助我们生成一个可迭代的对象,它的特殊之处在于只有在处理到每个元素时才会生成该元素,而不是将整个列表一次性生成。Generator函数具有惰性求值的特点,可以大幅减少内存的消耗,并且在处理大型数据时非常适用。 基本语法 在Python中,使用yield…

    python 2023年6月7日
    00
  • 如何使用Python将数据插入到数据库中?

    在Python中,可以使用多种方式将数据插入到数据库中,包括使用标准库中的sqlite3模块、使用第三方库如pymysql、psycopg2等。以下是使用sqlite3模块和pymysql库将插入到数据库中的完整攻略: 使用sqlite3模块将数据插入到数据库中 sqlite3模块是Python标准库中的一个模块,用于与SQLite数据库进行交互。以下是使用…

    python 2023年5月12日
    00
  • 怎样制作“别人家的”Chrome插件

    下面是详细讲解“怎样制作“别人家的”Chrome插件”的完整实例教程: 1. 制作Chrome插件前的准备工作 首先,我们需要安装好Chrome浏览器,并熟悉Chrome浏览器的插件使用方式。其次,我们需要准备好本地开发环境,并且已经配置好了必要的环境变量。 2. 创建Chrome插件的基础框架 在制作Chrome插件前,我们需要创建Chrome插件的基础框…

    python 2023年5月13日
    00
  • Python try-except-else-finally的具体使用

    以下是“Python try-except-else-finally的具体使用”的完整攻略,其中包括了try-except-else-finally的定义、具体使用方法、示例说明以及常见问题解决方法。 Python try-except-else-finally的具体使用 try-except-else-finally的定义 try-except-elsei…

    python 2023年5月13日
    00
  • Python操作列表的常用方法分享

    在Python中,列表是一种常见的数据结构,它可以用来存储和处理一组数据。本攻略将详细介绍Python中操作列表的常用方法,包括如何创建、访问、添加、删除、修改等方面。 创建列表 在Python中,可以使用方括号[]来创建一个列表。以下是一个示例代码,演示如何创建一个列表: # 创建一个列表 my_list = [1, 2, 3, 4, 5] # 输出结果 …

    python 2023年5月13日
    00
  • 如何快速学习Python编程?可以做什么职业?

    当今世界,Python是一种广泛用于编写和开发各种应用程序的流行编程语言。Python编程语言的简洁和易读性使其成为数据分析、人工智能、Web应用程序编程等方面的首选语言之一。所以要快速学习 Python 编程并开始 Python 相关职业,可以采取以下步骤: 第一步:学习Python语法 学习Python语法是必要的第一步。要学习Python,您可以参考以…

    python 2023年6月6日
    00
  • python基础入门之字典和集合

    Python中的字典(Dictionary)和集合(Set)是常用的数据类型之一。它们非常灵活,能够快速地存储大量的数据,并且可以通过键值对的方式来进行快速的检索和访问。 一、字典 字典是一种可变的数据类型,它的数据结构类似于映射:每个键值对都由一个键和一个与之对应的值组成。 1. 创建字典 可以使用{}或dict()函数来创建一个字典: # {}创建一个空…

    python 2023年5月13日
    00
  • 2020最新腾讯PHP试题(附答案及解析)

    下面是详细的攻略: 2020最新腾讯PHP试题(附答案及解析) 腾讯是国内知名的互联网公司,其招聘面试中经常会涉及到PHP相关的试题。本文将介绍2020年最新的腾讯PHP试题,并提供答案及解析。本文将从基础知识、面向对象、数据库、框架等方面进行讲解。 基础知识 1. PHP中的变量作用域有哪些? 答案:PHP中的变量作用域有全局作用域、局部作用域和静态作用域…

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