在这个数字化时代,IP地址不仅是设备与互联网通信的桥梁,它还蕴含着丰富的信息,比如地理位置、ISP(互联网服务提供商)和设备类型等。这些信息对于网络安全、用户行为分析以及个性化服务提供等方面都具有重要意义。本文将介绍一个Python脚本,它可以帮助用户查询指定IP地址的地理位置信息,并获取当前设备的相关信息。这个脚本使用了
requests
库来发送HTTP请求,以及platform
库来获取操作系统信息。通过这个脚本,用户可以轻松地获取IP地址的详细信息,从而更好地理解网络环境中的设备和位置信息。
目录
一、环境准备与库安装
在开始之前,确保你的Python环境已经搭建好。本工具将使用requests
库来发送HTTP请求,以及subprocess
和sys
库来处理环境相关的任务。如果你的环境中尚未安装requests
库,代码中的check_and_install
函数将自动为你安装。
import subprocess
import sys
def install(package):
subprocess.check_call([sys.executable, '-m', 'pip', 'install', package])
def check_and_install(package):
try:
__import__(package)
except ImportError:
print(f"{package} 未安装,正在安装...")
install(package)
二、进度条显示
在查询过程中,我们添加了一个进度条显示功能,以提高用户体验。进度条的显示分为两个阶段:前60%的进度较慢,后40%的进度较快,模拟了实际查询过程中可能的等待时间变化。
import time
def display_progress_bar(duration):
slow_duration = duration * 0.6
fast_duration = duration * 0.4
steps = 40
for i in range(steps):
if i < 24:
time.sleep(slow_duration / 24)
else:
time.sleep(fast_duration / 16)
sys.stdout.write('\r进度: [{}{}] {:.2f}%'.format('#' * (i + 1), ' ' * (steps - i - 1), (i + 1) * 100 / steps))
sys.stdout.flush()
print()
三、IP地理位置查询
核心功能是get_geolocation
函数,它通过向ipinfo.io
发送请求来获取IP地址的地理位置信息。这个函数首先尝试获取IP地址的相关信息,如果请求失败或解析出错,将打印错误信息并返回None
。
import requests
def get_geolocation(ip):
try:
response = requests.get(f'https://ipinfo.io/{ip}/json')
response.raise_for_status()
data = response.json()
location_info = {
'IP': data.get('ip'),
'城市': data.get('city'),
'地区': data.get('region'),
'国家': data.get('country'),
'邮政编码': data.get('postal'),
'经纬度': data.get('loc'),
'组织': data.get('org')
}
return location_info
except requests.exceptions.RequestException as e:
print(f"请求错误: {e}")
return None
except ValueError:
print("无法解析响应内容")
return None
四、设备信息获取
除了IP地理位置查询,我们还可以获取当前设备的基本信息,如操作系统、版本和架构等。
import platform
def get_device_info():
device_info = {
'设备名称': platform.node(),
'操作系统': platform.system(),
'操作系统版本': platform.version(),
'架构': platform.architecture()[0]
}
return device_info
五、用户交互与查询执行
在主函数中,我们首先检查并安装所需的库,然后通过用户输入获取要查询的IP地址,并在用户确认后执行查询。查询过程中显示进度条,查询完成后打印地理位置信息和设备信息。
if __name__ == "__main__":
check_and_install('requests')
import requests
user_ip = input("请输入要查询的IP地址: ")
confirm = input(f"您确定要查询IP地址 {user_ip} 吗?(y/n): ")
if confirm.lower() != 'y':
print("查询已取消。")
sys.exit()
print("正在查询中,请稍候...")
display_progress_bar(5)
location = get_geolocation(user_ip)
if location:
print("地理位置信息:")
for key, value in location.items():
print(f"{key}: {value}")
device_info = get_device_info()
print("\n设备信息:")
for key, value in device_info.items():
print(f"{key}: {value}")
六、完整代码
综上述,整理了代码,不需要手动安装所需库,代码中会自动安装。切勿使用该脚本做违法事!本脚本初衷是为网站被攻击站长提供IP查询出具体信息的
import subprocess
import sys
import platform
import time
import sys
def install(package):
subprocess.check_call([sys.executable, '-m', 'pip', 'install', package])
def check_and_install(package):
try:
__import__(package)
except ImportError:
print(f"{package} 未安装,正在安装...")
install(package)
def display_progress_bar(duration):
# 前60%慢,后40%快
slow_duration = duration * 0.6
fast_duration = duration * 0.4
steps = 40 # 进度条总共40步
for i in range(steps):
if i < 24: # 前60%的步骤
time.sleep(slow_duration / 24) # 每步睡眠时间
else: # 后40%的步骤
time.sleep(fast_duration / 16) # 每步睡眠时间
# 打印进度条
sys.stdout.write('\r进度: [{}{}] {:.2f}%'.format('#' * (i + 1), ' ' * (steps - i - 1), (i + 1) * 100 / steps))
sys.stdout.flush()
print() # 换行
if __name__ == "__main__":
# 检查并安装所需库
check_and_install('requests')
# 现在可以安全地导入 requests
import requests
def get_geolocation(ip):
try:
response = requests.get(f'https://ipinfo.io/{ip}/json')
response.raise_for_status() # 检查请求是否成功
data = response.json() # 将响应内容转换为 JSON 格式
location_info = {
'IP': data.get('ip'),
'城市': data.get('city'),
'地区': data.get('region'),
'国家': data.get('country'),
'邮政编码': data.get('postal'),
'经纬度': data.get('loc'), # 经纬度信息
'组织': data.get('org')
}
return location_info
except requests.exceptions.RequestException as e:
print(f"请求错误: {e}")
return None
except ValueError:
print("无法解析响应内容")
return None
def get_device_info():
device_info = {
'设备名称': platform.node(),
'操作系统': platform.system(),
'操作系统版本': platform.version(),
'架构': platform.architecture()[0]
}
return device_info
user_ip = input("请输入要查询的IP地址: ")
# 用户确认查询
confirm = input(f"您确定要查询IP地址 {user_ip} 吗?(y/n): ")
if confirm.lower() != 'y':
print("查询已取消。")
sys.exit()
# 显示进度条
print("正在查询中,请稍候...")
display_progress_bar(5) # 设置进度条总时长为5秒
location = get_geolocation(user_ip)
if location:
print("地理位置信息:")
for key, value in location.items():
print(f"{key}: {value}")
# 获取设备信息
device_info = get_device_info()
print("\n设备信息:")
for key, value in device_info.items():
print(f"{key}: {value}")
六、注意事项
请注意,由于网络原因,ipinfo.io
的解析可能不总是成功的。如果遇到问题,建议检查网页链接的合法性,并适当重试。此外,本工具仅供学习和研究使用,不得用于非法用途。
通过这个简单的工具,你可以快速了解任何IP地址的地理位置信息,为你的网络安全和数据分析工作提供有力支持。点我入群一起交流
标签:info,get,Python,地理位置,查询,duration,IP地址,print,data From: https://blog.csdn.net/m0_72606784/article/details/143275167