# yum -y install jq
# curl -s "http://ip-api.com/json/114.114.114.114?lang=zh-CN"| jq
{
"status": "success",
"country": "中国",
"countryCode": "CN",
"region": "SD",
"regionName": "山东省",
"city": "潍坊市",
"zip": "261000",
"lat": 36.7069,
"lon": 119.162,
"timezone": "Asia/Shanghai",
"isp": "China Unicom Shandong Province network",
"org": "NanJing XinFeng Information Technologies, Inc.",
"as": "AS4837 CHINA UNICOM China169 Backbone",
"query": "114.114.114.114"
}
# curl -s --connect-timeout 30 "http://ip-api.com/json/10.23.65.44?lang=zh-CN" | jq
{
"status": "fail",
"message": "private range",
"query": "10.23.65.44"
}
# curl -s "http://ip-api.com/json/8.8.8.8?lang=zh-CN"| jq
{
"status": "success",
"country": "美国",
"countryCode": "US",
"region": "VA",
"regionName": "弗吉尼亚州",
"city": "Ashburn",
"zip": "20149",
"lat": 39.03,
"lon": -77.5,
"timezone": "America/New_York",
"isp": "Google LLC",
"org": "Google Public DNS",
"as": "AS15169 Google LLC",
"query": "8.8.8.8"
}
这段JSON数据是从 http://ip-api.com/json/8.8.8.8?lang=zh-CN
获取的,它提供了关于IP地址 8.8.8.8
归属地的详细信息。
下面是对每个字段的详细解读:
{
"status": "success",
"country": "美国",
"countryCode": "US",
"region": "VA",
"regionName": "弗吉尼亚州",
"city": "Ashburn",
"zip": "20149",
"lat": 39.03,
"lon": -77.5,
"timezone": "America/New_York",
"isp": "Google LLC",
"org": "Google Public DNS",
"as": "AS15169 Google LLC",
"query": "8.8.8.8"
}
- status: 表示查询状态,这里为 "success",说明查询成功。
- country: 国家名称,这里是 "美国",表示IP地址所在国家是美国。
- countryCode: 国家代码,这里是 "US",表示美国的ISO 3166-1 alpha-2代码。
- region: 省或州的缩写,这里是 "VA",表示弗吉尼亚州。
- regionName: 省或州的全名,这里是 "弗吉尼亚州"。
- city: 城市名称,这里是 "Ashburn",表示城市是Ashburn。
- zip: 邮政编码,这里是 "20149"。
- lat 和 lon: 纬度和经度,这里分别是 39.03 和 -77.5。
- timezone: 时区,这里是 "America/New_York",表示美国东部时间。
- isp: 网络服务提供商,这里是 "Google LLC",表示提供该IP地址的服务商是Google。
- org: 组织名称,这里是 "Google Public DNS",表示Google公共DNS。
- as: 自治系统号码(AS号码)和提供者,这里是 "AS15169 Google LLC",表示使用的自治系统号和服务提供者是Google。
- query: 查询的IP地址,这里是 "8.8.8.8",即查询的IP地址本身。
这些信息可以帮助确定给定IP地址的大致地理位置、网络提供商和其他相关信息。
这类服务通常用于网络分析、地理定位和网络管理等应用。
# cat ip.txt
#---------------------------#
88.152.122.72
39.144.57.211
39.144.57.211
220.120.149.36
39.144.57.176
152.59.11.123
112.224.164.82
1.47.92.27
88.152.122.72
222.173.11.202
14.213.57.225
112.224.160.20
#---------------------------#
cat get_ip_location.sh
#!/bin/bash
# IP地址列表
# 循环处理每个IP地址
for ip in `cat ip.txt`;
do
# 使用curl获取IP地址的国家和城市信息,指定语言为简体中文
result=$(curl -s --connect-timeout 15 "http://ip-api.com/json/$ip?lang=zh-CN")
# 解析JSON数据,提取国家和城市信息
country=$(echo "$result" | jq -r '.country')
regionName=$(echo "$result" | jq -r '.regionName')
city=$(echo "$result" | jq -r '.city')
# 输出格式为 IP地址 国家/地区/城市
printf "%-25s %-s/%-s/%-s\n" "$ip" "$country" "$regionName" "$city"
done
#!/bin/bash
# IP地址列表文件路径
IP_FILE="ip.txt"
# 循环处理每个IP地址
while IFS= read -r ip || [[ -n "$ip" ]]; do
success=false
attempt=1
max_attempts=3 # 最大重试次数
# 循环直到成功获取到有效数据或达到最大重试次数
while [ $attempt -le $max_attempts ] && [ "$success" = false ]; do
# 使用curl获取IP地址的国家和城市信息,指定语言为简体中文
result=$(curl -s --connect-timeout 30 "http://ip-api.com/json/$ip?lang=zh-CN")
# 解析JSON数据,提取状态信息
status=$(echo "$result" | jq -r '.status')
# 检查状态是否为success,如果成功则获取其他信息并设置success为true
if [ "$status" = "success" ]; then
country=$(echo "$result" | jq -r '.country')
regionName=$(echo "$result" | jq -r '.regionName')
city=$(echo "$result" | jq -r '.city')
# 输出格式为 IP地址 国家/地区/城市
printf "%-25s %-s/%-s/%-s\n" "$ip" "$country" "$regionName" "$city"
success=true
elif [[ $(echo "$result" | jq -r '.message') = "private range" ]]; then
# 如果返回内容中有"message": "private range",则输出局域网IP信息
printf "%-25s %-s\n" "$ip" "局域网ip,请根据网段划分确认归属地"
success=true
else
# 如果status不为success,则增加尝试次数,并等待一段时间后重试
((attempt++))
sleep 2
fi
done
# 如果重试次数超过了设定的最大尝试次数,输出错误信息
if [ "$success" = false ]; then
printf "%-25s %-s\n" "$ip" "多次重试,无法获取ip归属地"
fi
done < "$IP_FILE"
88.152.122.72 德国/黑森州/法兰克福
39.144.57.211 中国/辽宁/沈阳市
39.144.57.211 中国/辽宁/沈阳市
220.120.149.36 韩国/京畿道/Anyang-si
39.144.57.176 中国/辽宁/沈阳市
152.59.11.123 印度/马哈拉施特拉邦/浦那
112.224.164.82 中国/山东省/青岛市
1.47.92.27 泰国/曼谷/曼谷
88.152.122.72 德国/黑森州/法兰克福
222.173.11.202 中国/山东省/新泰市
14.213.57.225 中国/广东/广州市
112.224.160.20 中国/山东省/潍坊市
8.8.8.8 美国/弗吉尼亚州/Ashburn
2.2.2.2 法国/法兰西岛/巴黎
10.23.65.44 局域网ip,请根据网段划分确认归属地
xx.xx.xx.xx 多次重试,无法获取ip归属地
网友评论