本文目录导读:

- 方法一:使用 curl(命令行/Linux/Mac)
- 方法二:Python 脚本(最推荐)
- 方法三:Bash 脚本(无 jq 依赖)
- 方法四:JavaScript/Node.js
- 推荐替代 API 列表
- 注意事项
可以使用很多种脚本查询 IP 归属地,最常用的方法是调用免费的 IP 地理定位 API,然后解析返回的 JSON 数据。
以下是几种主流语言的查询脚本示例,所有这些脚本都基于一个常用的免费 API:https://ipapi.co 或 https://ip-api.com。
使用 curl(命令行/Linux/Mac)
如果你只需要在终端快速查一下,这是最直接的方法。
查询当前本机IP归属地:
curl -s https://ipapi.co/json/ | jq .
注意:你需要安装 jq(一个命令行 JSON 处理器),否则输出会是一大段未格式化的文本。
查询指定IP(8.8.8.8):
curl -s https://ipapi.co/8.8.8.8/json/ | jq .
Python 脚本(最推荐)
Python 代码简洁,适合集成到自动化任务中。
import requests
import json
def get_ip_location(ip_address=None):
"""
查询IP归属地
:param ip_address: 要查询的IP,如果为None则查询本机IP
:return: 包含归属地信息的字典
"""
if ip_address:
# 查询指定IP(以 ip-api.com 为例,免费且无需API Key)
url = f"http://ip-api.com/json/{ip_address}"
else:
# 查询本机IP(使用 ip-api 同样支持)
url = "http://ip-api.com/json"
try:
response = requests.get(url, timeout=10)
data = response.json()
if data.get("status") == "success":
info = {
"IP": data.get("query"),
"国家": data.get("country"),
"地区": data.get("regionName"),
"城市": data.get("city"),
"ISP": data.get("isp"),
"组织": data.get("org"),
"经纬度": f"{data.get('lat')},{data.get('lon')}"
}
return info
else:
return {"错误": data.get("message", "查询失败")}
except Exception as e:
return {"错误": str(e)}
# 示例使用
if __name__ == "__main__":
# 查询本机IP
print("=== 本机IP归属地 ===")
result = get_ip_location()
for key, value in result.items():
print(f"{key}: {value}")
print("\n=== 查询 Google DNS (8.8.8.8) ===")
result = get_ip_location("8.8.8.8")
for key, value in result.items():
print(f"{key}: {value}")
Bash 脚本(无 jq 依赖)
如果你没有 jq 又想用 Shell 脚本,可以用 awk 或 sed 手动解析。
#!/bin/bash
# 查询本机IP归属地
query_ip() {
local ip=${1:-""}
local url
if [ -z "$ip" ]; then
url="http://ip-api.com/json/"
else
url="http://ip-api.com/json/$ip"
fi
# 获取JSON并解析(使用awk简单提取)
response=$(curl -s "$url")
# 提取常用字段
country=$(echo "$response" | awk -F'"' '/"country":"/{print $4}')
city=$(echo "$response" | awk -F'"' '/"city":"/{print $4}')
isp=$(echo "$response" | awk -F'"' '/"isp":"/{print $4}')
query_ip=$(echo "$response" | awk -F'"' '/"query":"/{print $4}')
echo "IP: $query_ip"
echo "国家: $country"
echo "城市: $city"
echo "ISP: $isp"
}
# 测试
echo "当前IP归属地:"
query_ip
echo ""
echo "指定IP (8.8.8.8) 归属地:"
query_ip "8.8.8.8"
JavaScript/Node.js
如果你想在服务器端或浏览器(有跨域限制)使用。
// Node.js 版本(需要安装 axios 或使用 fetch)
const fetch = require('node-fetch'); // 或使用内置 fetch (Node 18+)
async function getIpLocation(ipAddress = null) {
const baseUrl = 'http://ip-api.com/json';
const url = ipAddress ? `${baseUrl}/${ipAddress}` : baseUrl;
try {
const response = await fetch(url);
const data = await response.json();
if (data.status === 'success') {
return {
ip: data.query,
国家: data.country,
地区: data.regionName,
城市: data.city,
ISP: data.isp
};
} else {
return { error: '查询失败' };
}
} catch (error) {
return { error: error.message };
}
}
// 使用
getIpLocation('8.8.8.8').then(console.log);
推荐替代 API 列表
| API 地址 | 特点 | 免费限制 |
|---|---|---|
ip-api.com |
响应快,字段全,支持中文 | 每分钟45次请求 |
ipapi.co |
稳定,但部分字段需付费Key | 免费版每天1000次 |
ipinfo.io |
简单易用 | 免费版每天50000次(需注册Key) |
注意事项
- 尊重频率限制:免费API通常有请求频率限制(如
ip-api.com每分钟45次),不要高频率循环查询。 - 离线查询:如果需要大量查询且不想依赖网络,可以使用离线数据库(如 纯真IP库 或 GeoIP2),但脚本会更复杂。
- 隐私:不要用脚本频繁查询敏感IP(如公司服务器IP),因为请求会发送到第三方服务器。
最简单的选择是直接运行上面的 Python 版本,它兼顾了可读性和实用性。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播