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技术站