首页 > 编程语言 >Python——查询IP地址地理位置与设备信息

Python——查询IP地址地理位置与设备信息

时间:2024-10-30 17:48:14浏览次数:7  
标签:info get Python 地理位置 查询 duration IP地址 print data

在这个数字化时代,IP地址不仅是设备与互联网通信的桥梁,它还蕴含着丰富的信息,比如地理位置、ISP(互联网服务提供商)和设备类型等。这些信息对于网络安全、用户行为分析以及个性化服务提供等方面都具有重要意义。本文将介绍一个Python脚本,它可以帮助用户查询指定IP地址的地理位置信息,并获取当前设备的相关信息。这个脚本使用了requests库来发送HTTP请求,以及platform库来获取操作系统信息。通过这个脚本,用户可以轻松地获取IP地址的详细信息,从而更好地理解网络环境中的设备和位置信息。

目录

一、环境准备与库安装

二、进度条显示

三、IP地理位置查询

四、设备信息获取

五、用户交互与查询执行

六、完整代码

六、注意事项


一、环境准备与库安装

在开始之前,确保你的Python环境已经搭建好。本工具将使用requests库来发送HTTP请求,以及subprocesssys库来处理环境相关的任务。如果你的环境中尚未安装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

相关文章

  • 真香!Python十大文件操作整理,收藏起来以后有用!!
      精品专题:01.《C语言从不挂科到高绩点》课程详细笔记https://blog.csdn.net/yueyehuguang/category_12753294.html?spm=1001.2014.3001.548202.《SpringBoot详细教程》课程详细笔记https://blog.csdn.net/yueyehuguang/category_12789841.html?spm=1001.2014.3001.5482......
  • Python——点亮生活:励志名言生成器
    在这个快节奏、充满挑战的时代,我们每个人都可能在某个时刻感到迷茫或失去动力。在这些时刻,一句恰当的励志名言往往能够像一束光照亮我们的道路,给予我们继续前行的力量。本文将详细介绍如何使用Python编程语言来创建一个励志名言生成器,这不仅是一个编程实践的案例,也是一个能够......
  • 用python脚本检测笑脸漏洞
    漏洞原理VSFTPD(VerySecureFTPDaemon)是一个常用的FTP服务器软件。“vsftpd2.3.4Backdoor”(也称为“vsFTPd2.3.4Backdoor”或“vsftpdv2.3.4backdoor”)。该漏洞最初于2011年被公开发现,影响了VSFTPD2.3.4版本。这个版本中的一个后门(backdoor)允许攻击者通过一个特殊......
  • [Python学习日记-58] 开发基础练习1——员工信息查询
    [Python学习日记-58]开发基础练习1——员工信息查询简介题目答案简介        该练习结合了函数和一些常用的模块开发了一个使用命令行交互的员工信息查询程序,可以巩固实践之前学习的内容。题目一、程序需求        现要求你写⼀个简单的员⼯信息增删......
  • Matplotlib配置和样式表操作——Python实现
    今天在使用Python进行Matplotlib配置和样式表操作时候,发生如下报错:NameError:name'IPython_default'isnotdefined源代码如下:importnumpyasnpfrommatplotlibimportpyplotaspltplt.style.available[:5]defhist_and_lines():np.random.seed(0)fig,......
  • 【2024华为OD-E卷-200分-任务最优调度】(题目+思路+Java&C++&Python解析+在线测试)
    在线评测链接题目内容给定一个正整数数组表示待系统执行的任务列表,数组的每一个元素代表一个任务,元素的值表示该任务的类型。请计算执行完所有任务所需的最短时间。任务执行规则如下:任务可以按任意顺序执行,且每个任务执行耗时间均为111个时间单位两个同类型的......
  • 爬虫 python
    服务端渲染客户端渲染urllib.request.urlopen(url)还是requests.get(url)取决于具体的需求和上下文。        以下是两者的对比以及如何选择适合自己的工具:功能对比:易用性和API设计:requests:API设计更加人性化,提供了丰富的高级功能,如会话管理、自动重定向......
  • 说它是谁就是谁—Python语言中的鸭子类型
    鸭子类型(DuckTyping)是动态类型语言中的一种类型推断风格,尤其在Python语言中得到了广泛的应用。它的核心思想是:“如果它走起路来像鸭子,叫起来像鸭子,那么它就是鸭子”。这句话的意思是,我们不关心对象的类型是什么,而只关心对象的行为。只要对象具有所需的方法和属性,它就可以被视......
  • Python元类揭秘:掌控类的创造艺术
    元类(metaclass),作为类的构造者,不仅决定类的行为,还塑造其结构,开启了一扇通往高级元编程的大门。本文旨在全面解析Python元类的奥秘:从概念解析,到需求分析,再到定义与实践,最后,通过具体实例展现元类在现实世界应用中的魅力。一、元类:描述类的类在Python中,一切皆对象。类,作为对象......
  • Python工具箱系列(五十五)
    ​​文字识别文字识别是热门研究方向。目前相对成熟的有:•Google的tesseract项目,它能识别100多种语言•基于机器学习的多个项目,例如百度的paddlehubtesseract使用比较简单,但是配置相对复杂一下。在Ubuntubionic的安装过程如下。aptinstall-ytesseract-ocrtesseract-v#......