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

作者:烛阴日期:2025/10/21

准备工作:安装必备工具

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

1pip install requests
2

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

1import requests
2import json
3
4# 向ipinfo.io发送请求,不带任何IP地址,它会默认查询你自己的IP
5url = "https://ipinfo.io/json"
6
7try:
8    response = requests.get(url)
9    response.raise_for_status() # 如果请求失败 (如状态码 4xx, 5xx), 会抛出异常
10
11    # 将返回的JSON格式数据解析为Python字典
12    data = response.json()
13
14    print("--- 你的IP信息详情 ---")
15    # 为了美观,使用json.dumps进行格式化输出
16    print(json.dumps(data, indent=4, ensure_ascii=False))
17
18except requests.exceptions.RequestException as e:
19    print(f"请求失败: {e}")
20

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

1{
2    "ip": "xxx.xxx.xxx.xxx",
3    "hostname": "some.host.name",
4    "city": "xx",
5    "region": "xx",
6    "country": "CN",
7    "loc": "39.9042,116.4074",
8    "org": "xx",
9    "postal": "100000",
10    "timezone": "Asia/Shanghai",
11    "readme": "https://ipinfo.io/missingauth"
12}
13

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

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

1import requests
2import json
3
4# 定义要查询的IP地址
5target_ip = "8.8.8.8"
6
7# 构造请求URL,将IP地址拼接到URL中
8url = f"https://ipinfo.io/{target_ip}/json"
9
10try:
11    response = requests.get(url)
12    response.raise_for_status()
13
14    data = response.json()
15
16    print(f"--- IP: {target_ip} 的信息详情 ---")
17    print(json.dumps(data, indent=4, ensure_ascii=False))
18
19except requests.exceptions.RequestException as e:
20    print(f"请求失败: {e}")
21

输出将会是:

1{
2    "ip": "8.8.8.8",
3    "hostname": "dns.google",
4    "city": "Mountain View",
5    "region": "California",
6    "country": "US",
7    "loc": "37.4056,-122.0775",
8    "org": "AS15169 Google LLC",
9    "postal": "94043",
10    "timezone": "America/Los_Angeles",
11    "readme": "https://ipinfo.io/missingauth",
12    "anycast": true
13}
14

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

示例

1import requests
2
3def get_ip_info(ip_address: str) -> dict | None:
4    """
5    查询指定IP地址的详细信息。
6    
7    :param ip_address: 要查询的IP地址字符串。
8    :return: 包含IP信息的字典,如果查询失败则返回None。
9    """
10    url = f"https://ipinfo.io/{ip_address}/json"
11    try:
12        response = requests.get(url, timeout=5) # 增加超时设置
13        response.raise_for_status()
14        return response.json()
15    except requests.exceptions.RequestException as e:
16        print(f"查询IP {ip_address} 时出错: {e}")
17        return None
18
19# --- 使用我们封装好的函数 ---
20if __name__ == "__main__":
21    ip_list = ["8.8.8.8", "1.1.1.1", "114.114.114.114"]
22    
23    for ip in ip_list:
24        info = get_ip_info(ip)
25        if info:
26            country = info.get('country', 'N/A')
27            city = info.get('city', 'N/A')
28            org = info.get('org', 'N/A')
29            print(f"IP: {ip:<15} | Location: {country}, {city} | Organization: {org}")
30

结语

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


用 Python 揭秘 IP 地址背后的地理位置和信息》 是转载文章,点击查看原文


相关推荐


使用AI编程工具的“经济学”:成本控制与性能优化策略
rengang662025/10/20

最近跟几个朋友聊天,发现大家都在用AI编程工具,比如Cursor、Claude Code、Codex等。聊到兴头上,我问了一个“煞风景”的问题:“兄弟们,这月API账单看了吗?” 空气突然安静。 没错,AI编程工具确实香,写代码、改Bug、写文档,效率起飞。但“免费的午餐”总是短暂的,当我们真正把它用在项目里,或者用量一大起来,那账单就跟坐了火箭一样往上蹿。今天,我就想跟大家聊聊,作为一个“精打细算”的程序员,我们怎么在享受AI便利的同时,把成本控制得死死的,实现“降本增效”的终极目标。 这篇文


LeetCode 402 - 移掉 K 位数字
网罗开发2025/10/19

文章目录 摘要描述题解答案题解代码分析代码逻辑逐步拆解: 示例测试及结果时间复杂度空间复杂度总结 摘要 在很多前端或后端的业务逻辑中,我们经常要处理数字的“裁剪”问题,比如在账单明细里自动保留最小金额组合、或在数据压缩时尽量保留较小值。LeetCode 第 402 题《移掉 K 位数字》(Remove K Digits)就是一个非常贴近这种逻辑的算法题。 题目的核心是:给定一个非负整数(以字符串形式表示),从中移除 k 个数字,使得剩下的数字最小化。 看似简单,但


谷歌 × 耶鲁联手发布抗癌神器!AI 推理精准狙击「隐身」癌细胞
新智元2025/10/17

「【新智元导读】近日,谷歌与耶鲁大学联合发布的大模型 C2S-Scale,首次提出并验证了一项全新的「抗癌假设」。这一成果表明,大模型不仅能复现已知科学规律,还具备生成可验新科学假设的能力。」 刚刚,AI 科学应用领域又有一件大事发生! 谷歌与耶鲁大学的科学家们联合发布了一个大模型 Cell2Sentence-Scale 27B(C2S-Scale)。 该模型提出了一个关于癌细胞行为的全新假设,并在多次体外实验中得到验证。 这一发现引发广泛关注,它展示了人工智能模型生成原创科学假设的潜力,有望


【ComfyUI】Animate单人物角色视频替换
Mr数据杨2025/10/16

在智能创作和视频生成的实践中,工作流不仅仅是节点的堆叠,而是一个围绕业务目标、数据流转和模型能力的有机整体。通过对工作流的抽象与模块化设计,我们可以在复杂的生成任务中实现高效的可复用性与灵活性。本篇文章将围绕某实际业务场景展开,介绍完整的工作流结构,并重点解析核心模型与节点配置方式,帮助读者从整体视角理解其逻辑与实现。 文章目录 工作流核心模型工作 Node 节点工作流程应用场景 开发与应用 工作流 一个完整的工作流是由数据输入、模型处理、结果合成和输出展示构成的有机链路。


如何在Linux服务器上部署jenkins?
Broken Arrows2025/10/15

一,首先安装JAVA环境 Java8、java11、java17(JRE或者 JDK都可以),从 Jenkins2.357(于2022年6月28日发布)和2.361.1LTS版本开始,Jenkins需要Java11或更高版本。此外,从Jenkins2.355(2022年6月14日发布和Jenkins2.346,1LTS(2022年6月22日发布)开始,Jenkins支持Java 17。 一般我们推荐使用包管理器来进行安装,我这里使用的是Ubuntu的系统,在这里给以下步骤做参考。 # 更新


将 GPU 级性能带到企业级 Java:CUDA 集成实用指南
程序猿DD2025/10/13

引言 在企业软件世界中,Java 依靠其可靠性、可移植性与丰富生态持续占据主导地位。 然而,一旦涉及高性能计算(HPC)或数据密集型作业,Java 的托管运行时与垃圾回收开销会在满足现代应用的低延迟与高吞吐需求上带来挑战,尤其是那些涉及实时分析、海量日志管道或深度计算的场景。 与此同时,最初为图像渲染设计的图形处理器(GPU)已成为并行计算的实用加速器。 像 CUDA 这样的技术让开发者能够驾驭 GPU 的全部算力,在计算密集型任务上获得显著的加速效果。 但问题在于:CUDA 主要面向 C/C+


服务端之NestJS接口响应message编写规范详解、写给前后端都舒服的接口、API提示信息标准化
焊码IoT2025/10/12

MENU 前言定义提示信息设计原则提示信息风格分类提示信息模板化设计国际化与多语言支持最佳实践参考示例(NestJS响应)总结统一风格示例清单推荐API响应message清单(可直接使用) 前言 在现代后端开发中,接口响应不仅仅是数据的传递,还承担着向前端或用户传递操作状态和结果的功能。一个规范、统一的message字段设计,可以显著提升系统的可维护性、前端开发效率和用户体验。 定义 响应结构示例(NestJS风格) return { statu


Ling-1T:蚂蚁百灵如何以“非思考”策略,开启万亿参数效率新篇章?
墨风如雪2025/10/10

2025年10月9日,AI世界再次被一颗“重磅炸弹”点燃。蚂蚁集团百灵大模型团队正式发布了其Ling 2.0系列的首款旗舰模型——Ling-1T。这不仅仅是一个拥有万亿参数的通用大语言模型,它更代表着蚂蚁集团在大模型设计理念上的一次大胆创新和实践突破。它已全面开源,正等待着全球开发者共同探索其无限潜力。 “非思考”定位:速度与精准的完美结合 初听“非思考模型”,你或许会感到好奇。这并非 Ling-1T 不具备推理能力,而是蚂蚁集团对大模型家族的一种策略性划分。在百灵模型矩阵中,“Ling系列”


C# 泛型(Generic)
wjs20242025/10/9

C# 泛型(Generic) 泛型是C#编程语言中一种强大的功能,它允许我们在不具体指定数据类型的情况下编写代码。这种设计模式使得代码更加通用、灵活,并且可以避免类型转换的错误。下面将详细探讨C#泛型的概念、应用场景、实现方法以及相关最佳实践。 泛型的概念 在C#中,泛型允许我们定义可以支持多种数据类型的类或方法。这种类型参数化的机制使得代码更加通用,从而减少了类型转换的需要,并提高了代码的复用性。 泛型的好处 代码复用:通过泛型,我们可以定义一次模板,然后在多个地方复用。


Spring Boot 实现微信登录,So Easy !
皮皮林5512025/10/7

前言 小程序登录在开发中是最常见的需求,哪怕小程序登录不是你做,你还是要了解一下流程,后续都要使用到openId和unionId,你需要知道这些是干什么的。 需求分析 点击登录会弹出弹窗,需要获取用户手机号进行登录。 图片 微信登录业务逻辑规则: 图片 思路说明 参考微信官方文档的提供的思路,官方文档: developers.weixin.qq.com/miniprogram… 微信官方推荐登录流程: 图片 注意点: • 前端在小程序集成微信相关依赖,调用wx.login获取临时登录

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0