用 Python 揭秘 IP 地址背后的地理位置和信息

准备工作:安装必备工具

首先,请确保你的Python环境中安装了requests库。

bash 复制代码
pip install requests

第一步:查询自己的公网 IP 信息

python 复制代码
import requests
import json

# 向ipinfo.io发送请求,不带任何IP地址,它会默认查询你自己的IP
url = "https://ipinfo.io/json"

try:
    response = requests.get(url)
    response.raise_for_status() # 如果请求失败 (如状态码 4xx, 5xx), 会抛出异常

    # 将返回的JSON格式数据解析为Python字典
    data = response.json()

    print("--- 你的IP信息详情 ---")
    # 为了美观,使用json.dumps进行格式化输出
    print(json.dumps(data, indent=4, ensure_ascii=False))

except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

运行后,你将看到类似这样的输出(信息会根据你的实际情况而变):

json 复制代码
{
    "ip": "xxx.xxx.xxx.xxx",
    "hostname": "some.host.name",
    "city": "xx",
    "region": "xx",
    "country": "CN",
    "loc": "39.9042,116.4074",
    "org": "xx",
    "postal": "100000",
    "timezone": "Asia/Shanghai",
    "readme": "https://ipinfo.io/missingauth"
}

第二步:查询任意指定的 IP 地址

我们可以查询任何一个我们想查的公网IP,比如谷歌的公共DNS服务器 8.8.8.8

python 复制代码
import requests
import json

# 定义要查询的IP地址
target_ip = "8.8.8.8"

# 构造请求URL,将IP地址拼接到URL中
url = f"https://ipinfo.io/{target_ip}/json"

try:
    response = requests.get(url)
    response.raise_for_status()

    data = response.json()

    print(f"--- IP: {target_ip} 的信息详情 ---")
    print(json.dumps(data, indent=4, ensure_ascii=False))

except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

输出将会是:

json 复制代码
{
    "ip": "8.8.8.8",
    "hostname": "dns.google",
    "city": "Mountain View",
    "region": "California",
    "country": "US",
    "loc": "37.4056,-122.0775",
    "org": "AS15169 Google LLC",
    "postal": "94043",
    "timezone": "America/Los_Angeles",
    "readme": "https://ipinfo.io/missingauth",
    "anycast": true
}

第三步:自由封装成自己需要的内容显示库

示例

python 复制代码
import requests

def get_ip_info(ip_address: str) -> dict | None:
    """
    查询指定IP地址的详细信息。
    
    :param ip_address: 要查询的IP地址字符串。
    :return: 包含IP信息的字典,如果查询失败则返回None。
    """
    url = f"https://ipinfo.io/{ip_address}/json"
    try:
        response = requests.get(url, timeout=5) # 增加超时设置
        response.raise_for_status()
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"查询IP {ip_address} 时出错: {e}")
        return None

# --- 使用我们封装好的函数 ---
if __name__ == "__main__":
    ip_list = ["8.8.8.8", "1.1.1.1", "114.114.114.114"]
    
    for ip in ip_list:
        info = get_ip_info(ip)
        if info:
            country = info.get('country', 'N/A')
            city = info.get('city', 'N/A')
            org = info.get('org', 'N/A')
            print(f"IP: {ip:<15} | Location: {country}, {city} | Organization: {org}")

结语

点个赞,关注我获取更多实用 Python 技术干货!如果觉得有用,记得收藏本文!

相关推荐
佛系打工仔3 小时前
绘制K线第二章:背景网格绘制
android·前端·架构
知乎的哥廷根数学学派5 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
且去填词5 小时前
DeepSeek :基于 Schema 推理与自愈机制的智能 ETL
数据仓库·人工智能·python·语言模型·etl·schema·deepseek
明天好,会的5 小时前
分形生成实验(五):人机协同破局--30万token揭示Actix-web状态管理的微妙边界
运维·服务器·前端
人工干智能5 小时前
OpenAI Assistants API 中 client.beta.threads.messages.create方法,兼谈一星*和两星**解包
python·llm
databook5 小时前
当条形图遇上极坐标:径向与圆形条形图的视觉革命
python·数据分析·数据可视化
C_心欲无痕5 小时前
nginx - alias 和 root 的区别详解
运维·前端·nginx
阿部多瑞 ABU6 小时前
`chenmo` —— 可编程元叙事引擎 V2.3+
linux·人工智能·python·ai写作
acanab6 小时前
VScode python插件
ide·vscode·python