IP-API使用教程#

软件介绍#

IP-API是一款免费的IP地址信息查询服务,提供详细的地理位置、ISP、ASN、时区等信息。它无需API密钥即可使用,支持HTTP和HTTPS协议,是快速查询IP信息的理想选择。

主要功能#

  • IP地址地理位置查询
  • ISP和ASN信息获取
  • 时区信息查询
  • 货币信息查询
  • 移动网络检测
  • 代理/VPN检测(付费版)
  • 批量查询(付费版)
  • JSON/XML/CSV格式输出

适用场景#

  • 快速IP信息查询
  • 网络安全分析
  • 地理位置分析
  • 流量分析
  • 系统管理

入门级使用#

基本IP查询#

查询单个IP地址#

# 基本查询(JSON格式)
curl http://ip-api.com/json/8.8.8.8

# 输出示例
{
  "query": "8.8.8.8",
  "status": "success",
  "country": "United States",
  "countryCode": "US",
  "region": "CA",
  "regionName": "California",
  "city": "Mountain View",
  "zip": "94043",
  "lat": 37.4223,
  "lon": -122.085,
  "timezone": "America/Los_Angeles",
  "isp": "Google LLC",
  "org": "Google Public DNS",
  "as": "AS15169 Google LLC"
}

查询当前IP#

# 查询本机IP信息
curl http://ip-api.com/json/

# 输出当前IP的详细信息

使用HTTPS查询#

# 使用HTTPS协议查询
curl https://ip-api.com/json/8.8.8.8

基本信息字段说明#

  • query: 查询的IP地址
  • status: 查询状态(success/fail)
  • country: 国家名称
  • countryCode: 国家代码
  • region: 州/省代码
  • regionName: 州/省名称
  • city: 城市
  • zip: 邮政编码
  • lat: 纬度
  • lon: 经度
  • timezone: 时区
  • isp: ISP名称
  • org: 组织名称
  • as: AS号和名称

初级使用#

指定返回字段#

只返回特定字段#

# 只返回地理位置信息
curl "http://ip-api.com/json/8.8.8.8?fields=status,country,regionName,city"

# 只返回ISP信息
curl "http://ip-api.com/json/8.8.8.8?fields=isp,org,as"

# 只返回坐标信息
curl "http://ip-api.com/json/8.8.8.8?fields=lat,lon,timezone"

返回所有字段#

# 返回所有可用字段
curl "http://ip-api.com/json/8.8.8.8?fields=status,message,country,countryCode,region,regionName,city,zip,lat,lon,timezone,isp,org,as,reverse,mobile,proxy,hosting,query"

不同输出格式#

JSON格式(默认)#

# JSON格式输出
curl http://ip-api.com/json/8.8.8.8

XML格式#

# XML格式输出
curl http://ip-api.com/xml/8.8.8.8

# 输出示例
<?xml version="1.0" encoding="UTF-8"?>
<query>
  <status>success</status>
  <country>United States</country>
  <countryCode>US</countryCode>
  <region>CA</region>
  <regionName>California</regionName>
  <city>Mountain View</city>
  <zip>94043</zip>
  <lat>37.4223</lat>
  <lon>-122.085</lon>
  <timezone>America/Los_Angeles</timezone>
  <isp>Google LLC</isp>
  <org>Google Public DNS</org>
  <as>AS15169 Google LLC</as>
  <query>8.8.8.8</query>
</query>

CSV格式#

# CSV格式输出
curl http://ip-api.com/csv/8.8.8.8

# 输出示例
success,United States,US,CA,California,Mountain View,94043,37.4223,-122.085,America/Los_Angeles,Google LLC,Google Public DNS,AS15169 Google LLC,8.8.8.8

纯文本格式#

# 纯文本格式输出
curl http://ip-api.com/line/8.8.8.8

# 输出示例
8.8.8.8
United States
California
Mountain View
37.4223,-122.085

中级使用#

批量查询#

使用脚本批量查询#

#!/bin/bash
# 批量IP查询脚本

IP_FILE="ip_list.txt"
OUTPUT_FILE="ip_info.json"

echo "[" > "$OUTPUT_FILE"

first=true
while read ip; do
    if [ "$first" = true ]; then
        first=false
    else
        echo "," >> "$OUTPUT_FILE"
    fi
    curl -s "http://ip-api.com/json/$ip" >> "$OUTPUT_FILE"
done < "$IP_FILE"

echo "]" >> "$OUTPUT_FILE"
echo "批量查询完成,结果已保存到 $OUTPUT_FILE"

使用Python批量查询#

#!/usr/bin/env python3
import requests
import json

ip_list = ['8.8.8.8', '1.1.1.1', '208.67.222.222']
results = []

for ip in ip_list:
    response = requests.get(f'http://ip-api.com/json/{ip}')
    data = response.json()
    results.append(data)

# 保存结果
with open('ip_info.json', 'w') as f:
    json.dump(results, f, indent=2)

print("批量查询完成")

错误处理#

检查查询状态#

#!/bin/bash
# 带错误处理的IP查询脚本

IP=$1
RESULT=$(curl -s "http://ip-api.com/json/$IP")
STATUS=$(echo "$RESULT" | jq -r '.status')

if [ "$STATUS" = "success" ]; then
    echo "查询成功:"
    echo "$RESULT" | jq '.'
else
    MESSAGE=$(echo "$RESULT" | jq -r '.message')
    echo "查询失败: $MESSAGE"
fi

处理无效IP#

#!/bin/bash
# 处理无效IP地址

IP=$1
RESULT=$(curl -s "http://ip-api.com/json/$IP")
STATUS=$(echo "$RESULT" | jq -r '.status')

if [ "$STATUS" = "fail" ]; then
    echo "无效的IP地址或查询失败"
    exit 1
fi

echo "IP: $IP"
echo "国家: $(echo "$RESULT" | jq -r '.country')"
echo "城市: $(echo "$RESULT" | jq -r '.city')"
echo "ISP: $(echo "$RESULT" | jq -r '.isp')"

性能优化#

并发查询#

#!/bin/bash
# 并发查询多个IP

IP_LIST=("8.8.8.8" "1.1.1.1" "208.67.222.222" "9.9.9.9" "64.6.64.6")

for ip in "${IP_LIST[@]}"; do
    {
        result=$(curl -s "http://ip-api.com/json/$ip")
        echo "$ip: $(echo "$result" | jq -r '.country')"
    } &
done

wait
echo "所有查询完成"

使用缓存#

#!/bin/bash
# 使用缓存减少重复查询

CACHE_DIR="ip_cache"
mkdir -p "$CACHE_DIR"

query_ip() {
    local ip=$1
    local cache_file="$CACHE_DIR/${ip}.json"
    
    if [ -f "$cache_file" ]; then
        cat "$cache_file"
    else
        local result=$(curl -s "http://ip-api.com/json/$ip")
        echo "$result" > "$cache_file"
        echo "$result"
    fi
}

# 使用缓存查询
query_ip "8.8.8.8" | jq '.'

中上级使用#

高级字段查询#

查询反向DNS#

# 查询反向DNS信息
curl "http://ip-api.com/json/8.8.8.8?fields=status,reverse"

# 输出示例
{
  "status": "success",
  "reverse": "dns.google"
}

查询移动网络信息#

# 查询是否为移动网络
curl "http://ip-api.com/json/8.8.8.8?fields=status,mobile"

# 输出示例
{
  "status": "success",
  "mobile": false
}

查询代理/托管信息(付费版)#

# 查询代理信息(需要付费API密钥)
curl "http://ip-api.com/json/8.8.8.8?fields=status,proxy,hosting&key=your_api_key"

# 输出示例
{
  "status": "success",
  "proxy": false,
  "hosting": false
}

数据处理#

提取特定信息#

#!/bin/bash
# 提取IP的特定信息

IP=$1
RESULT=$(curl -s "http://ip-api.com/json/$IP")

COUNTRY=$(echo "$RESULT" | jq -r '.country')
CITY=$(echo "$RESULT" | jq -r '.city')
ISP=$(echo "$RESULT" | jq -r '.isp')
LAT=$(echo "$RESULT" | jq -r '.lat')
LON=$(echo "$RESULT" | jq -r '.lon')

echo "IP地址: $IP"
echo "国家: $COUNTRY"
echo "城市: $CITY"
echo "ISP: $ISP"
echo "坐标: $LAT, $LON"

格式化输出#

#!/bin/bash
# 格式化输出IP信息

IP=$1
RESULT=$(curl -s "http://ip-api.com/json/$IP")

echo "================================"
echo "IP地址信息"
echo "================================"
echo "IP地址: $(echo "$RESULT" | jq -r '.query')"
echo "国家: $(echo "$RESULT" | jq -r '.country')"
echo "地区: $(echo "$RESULT" | jq -r '.regionName')"
echo "城市: $(echo "$RESULT" | jq -r '.city')"
echo "邮编: $(echo "$RESULT" | jq -r '.zip')"
echo "坐标: $(echo "$RESULT" | jq -r '.lat'), $(echo "$RESULT" | jq -r '.lon')"
echo "时区: $(echo "$RESULT" | jq -r '.timezone')"
echo "ISP: $(echo "$RESULT" | jq -r '.isp')"
echo "组织: $(echo "$RESULT" | jq -r '.org')"
echo "ASN: $(echo "$RESULT" | jq -r '.as')"
echo "================================"

集成到其他工具#

与Nmap集成#

#!/bin/bash
# 结合Nmap和IP-API

TARGET=$1

# 使用Nmap扫描主机
nmap -sn "$TARGET" | grep "Nmap scan report" | awk '{print $5}' > hosts.txt

# 查询每个主机的IP信息
while read ip; do
    echo "=== $ip ==="
    curl -s "http://ip-api.com/json/$ip" | jq -r '.country, .city, .isp'
    echo ""
done < hosts.txt

与日志分析集成#

#!/bin/bash
# 分析日志文件中的IP

LOG_FILE="/var/log/nginx/access.log"
OUTPUT_FILE="log_ip_analysis.txt"

echo "=== 日志IP分析 ===" > "$OUTPUT_FILE"

# 提取唯一IP
awk '{print $1}' "$LOG_FILE" | sort -u > unique_ips.txt

# 查询每个IP的信息
while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    country=$(echo "$result" | jq -r '.country')
    city=$(echo "$result" | jq -r '.city')
    echo "$ip - $country, $city" >> "$OUTPUT_FILE"
done < unique_ips.txt

echo "分析完成,结果已保存到 $OUTPUT_FILE"

高级使用#

地理位置分析#

按国家统计#

#!/bin/bash
# 按国家统计IP分布

IP_FILE="ip_list.txt"
OUTPUT_FILE="country_stats.txt"

# 统计每个国家的IP数量
declare -A country_count

while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    country=$(echo "$result" | jq -r '.country')
    country_count["$country"]=$((${country_count["$country"]} + 1))
done < "$IP_FILE"

# 输出统计结果
echo "=== 国家分布统计 ===" > "$OUTPUT_FILE"
for country in "${!country_count[@]}"; do
    echo "$country: ${country_count[$country]}" >> "$OUTPUT_FILE"
done | sort -t: -k2 -rn >> "$OUTPUT_FILE"

echo "统计完成,结果已保存到 $OUTPUT_FILE"

生成地图数据#

#!/bin/bash
# 生成地图可视化数据

IP_FILE="ip_list.txt"
OUTPUT_FILE="map_data.json"

echo "[" > "$OUTPUT_FILE"

first=true
while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    lat=$(echo "$result" | jq -r '.lat')
    lon=$(echo "$result" | jq -r '.lon')
    country=$(echo "$result" | jq -r '.country')
    
    if [ "$first" = true ]; then
        first=false
    else
        echo "," >> "$OUTPUT_FILE"
    fi
    
    echo "{\"ip\":\"$ip\",\"lat\":$lat,\"lon\":$lon,\"country\":\"$country\"}" >> "$OUTPUT_FILE"
done < "$IP_FILE"

echo "]" >> "$OUTPUT_FILE"
echo "地图数据已生成"

ISP分析#

按ISP统计#

#!/bin/bash
# 按ISP统计IP分布

IP_FILE="ip_list.txt"
OUTPUT_FILE="isp_stats.txt"

# 统计每个ISP的IP数量
declare -A isp_count

while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    isp=$(echo "$result" | jq -r '.isp')
    isp_count["$isp"]=$((${isp_count["$isp"]} + 1))
done < "$IP_FILE"

# 输出统计结果
echo "=== ISP分布统计 ===" > "$OUTPUT_FILE"
for isp in "${!isp_count[@]}"; do
    echo "$isp: ${isp_count[$isp]}" >> "$OUTPUT_FILE"
done | sort -t: -k2 -rn >> "$OUTPUT_FILE"

echo "统计完成,结果已保存到 $OUTPUT_FILE"

ASN分析#

#!/bin/bash
# ASN分析脚本

IP_FILE="ip_list.txt"
OUTPUT_FILE="asn_analysis.txt"

echo "=== ASN分析 ===" > "$OUTPUT_FILE"

# 提取唯一ASN
declare -A asn_list

while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    as=$(echo "$result" | jq -r '.as')
    asn_list["$as"]=1
done < "$IP_FILE"

# 输出ASN列表
echo "发现的ASN:" >> "$OUTPUT_FILE"
for asn in "${!asn_list[@]}"; do
    echo "$asn" >> "$OUTPUT_FILE"
done | sort >> "$OUTPUT_FILE"

echo "ASN分析完成,结果已保存到 $OUTPUT_FILE"

大师级使用#

自动化监控#

实时IP监控#

#!/bin/bash
# 实时IP监控脚本

LOG_FILE="/var/log/nginx/access.log"
MONITOR_FILE="monitored_ips.txt"
OUTPUT_FILE="monitor_log.txt"

# 监控日志文件的新连接
tail -f "$LOG_FILE" | while read line; do
    ip=$(echo "$line" | awk '{print $1}')
    
    # 检查是否已监控
    if ! grep -q "$ip" "$MONITOR_FILE" 2>/dev/null; then
        echo "$(date): 新IP检测 - $ip" >> "$OUTPUT_FILE"
        
        # 查询IP信息
        result=$(curl -s "http://ip-api.com/json/$ip")
        country=$(echo "$result" | jq -r '.country')
        city=$(echo "$result" | jq -r '.city')
        isp=$(echo "$result" | jq -r '.isp')
        
        echo "  国家: $country, 城市: $city, ISP: $isp" >> "$OUTPUT_FILE"
        
        # 添加到监控列表
        echo "$ip" >> "$MONITOR_FILE"
    fi
done

定期IP检查#

#!/bin/bash
# 定期IP检查脚本

IP_FILE="check_ips.txt"
OUTPUT_FILE="check_results.txt"
INTERVAL=3600  # 每小时检查一次

while true; do
    echo "$(date): 开始检查" >> "$OUTPUT_FILE"
    
    while read ip; do
        result=$(curl -s "http://ip-api.com/json/$ip")
        status=$(echo "$result" | jq -r '.status')
        
        if [ "$status" = "success" ]; then
            country=$(echo "$result" | jq -r '.country')
            echo "$ip: $country" >> "$OUTPUT_FILE"
        else
            echo "$ip: 查询失败" >> "$OUTPUT_FILE"
        fi
    done < "$IP_FILE"
    
    echo "$(date): 检查完成" >> "$OUTPUT_FILE"
    echo "" >> "$OUTPUT_FILE"
    
    sleep "$INTERVAL"
done

数据库集成#

存储到SQLite#

#!/bin/bash
# 将IP信息存储到SQLite数据库

DB_FILE="ip_info.db"
IP_FILE="ip_list.txt"

# 创建数据库表
sqlite3 "$DB_FILE" "CREATE TABLE IF NOT EXISTS ip_info (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    ip TEXT UNIQUE,
    country TEXT,
    region TEXT,
    city TEXT,
    zip TEXT,
    lat REAL,
    lon REAL,
    timezone TEXT,
    isp TEXT,
    org TEXT,
    as_info TEXT,
    query_time DATETIME DEFAULT CURRENT_TIMESTAMP
);"

# 查询并存储IP信息
while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    status=$(echo "$result" | jq -r '.status')
    
    if [ "$status" = "success" ]; then
        country=$(echo "$result" | jq -r '.country')
        region=$(echo "$result" | jq -r '.regionName')
        city=$(echo "$result" | jq -r '.city')
        zip=$(echo "$result" | jq -r '.zip')
        lat=$(echo "$result" | jq -r '.lat')
        lon=$(echo "$result" | jq -r '.lon')
        timezone=$(echo "$result" | jq -r '.timezone')
        isp=$(echo "$result" | jq -r '.isp')
        org=$(echo "$result" | jq -r '.org')
        as_info=$(echo "$result" | jq -r '.as')
        
        sqlite3 "$DB_FILE" "INSERT OR REPLACE INTO ip_info 
            (ip, country, region, city, zip, lat, lon, timezone, isp, org, as_info)
            VALUES ('$ip', '$country', '$region', '$city', '$zip', $lat, $lon, '$timezone', '$isp', '$org', '$as_info');"
    fi
done < "$IP_FILE"

echo "IP信息已存储到数据库 $DB_FILE"

查询数据库#

#!/bin/bash
# 查询SQLite数据库

DB_FILE="ip_info.db"

# 查询所有IP信息
echo "=== 所有IP信息 ==="
sqlite3 "$DB_FILE" "SELECT ip, country, city, isp FROM ip_info;"

# 按国家统计
echo ""
echo "=== 按国家统计 ==="
sqlite3 "$DB_FILE" "SELECT country, COUNT(*) as count FROM ip_info GROUP BY country ORDER BY count DESC;"

# 查询特定国家的IP
echo ""
echo "=== 美国IP ==="
sqlite3 "$DB_FILE" "SELECT * FROM ip_info WHERE country='United States';"

实战案例#

案例1: 网站访问者分析#

场景描述#

分析网站访问日志,了解访问者的地理分布和ISP信息。

实施步骤#

#!/bin/bash
# 网站访问者分析脚本

ACCESS_LOG="/var/log/nginx/access.log"
OUTPUT_DIR="visitor_analysis"
mkdir -p "$OUTPUT_DIR"

# 提取唯一IP
awk '{print $1}' "$ACCESS_LOG" | sort -u > "$OUTPUT_DIR/unique_ips.txt"

# 按国家统计
echo "=== 按国家统计 ===" > "$OUTPUT_DIR/by_country.txt"
declare -A country_count

while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    country=$(echo "$result" | jq -r '.country')
    country_count["$country"]=$((${country_count["$country"]} + 1))
done < "$OUTPUT_DIR/unique_ips.txt"

for country in "${!country_count[@]}"; do
    echo "$country: ${country_count[$country]}" >> "$OUTPUT_DIR/by_country.txt"
done | sort -t: -k2 -rn >> "$OUTPUT_DIR/by_country.txt"

# 按城市统计
echo "=== 按城市统计 ===" > "$OUTPUT_DIR/by_city.txt"
declare -A city_count

while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    city=$(echo "$result" | jq -r '.city')
    city_count["$city"]=$((${city_count["$city"]} + 1))
done < "$OUTPUT_DIR/unique_ips.txt"

for city in "${!city_count[@]}"; do
    echo "$city: ${city_count[$city]}" >> "$OUTPUT_DIR/by_city.txt"
done | sort -t: -k2 -rn | head -20 >> "$OUTPUT_DIR/by_city.txt"

# 按ISP统计
echo "=== 按ISP统计 ===" > "$OUTPUT_DIR/by_isp.txt"
declare -A isp_count

while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    isp=$(echo "$result" | jq -r '.isp')
    isp_count["$isp"]=$((${isp_count["$isp"]} + 1))
done < "$OUTPUT_DIR/unique_ips.txt"

for isp in "${!isp_count[@]}"; do
    echo "$isp: ${isp_count[$isp]}" >> "$OUTPUT_DIR/by_isp.txt"
done | sort -t: -k2 -rn | head -20 >> "$OUTPUT_DIR/by_isp.txt"

echo "访问者分析完成,结果保存在 $OUTPUT_DIR 目录"

案例2: 异常流量检测#

场景描述#

检测异常流量来源,识别来自特定地区或ISP的可疑访问。

实施步骤#

#!/bin/bash
# 异常流量检测脚本

ACCESS_LOG="/var/log/nginx/access.log"
THRESHOLD=100
OUTPUT_FILE="anomaly_detection.txt"

echo "=== 异常流量检测报告 ===" > "$OUTPUT_FILE"
echo "检测时间: $(date)" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"

# 统计高频IP
echo "=== 高频访问IP ===" >> "$OUTPUT_FILE"
awk '{print $1}' "$ACCESS_LOG" | sort | uniq -c | sort -rn | head -20 >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"

# 分析高频IP的地理位置
echo "=== 高频IP地理分析 ===" >> "$OUTPUT_FILE"
awk '{print $1}' "$ACCESS_LOG" | sort | uniq -c | sort -rn | head -20 | awk '{print $2}' > high_freq_ips.txt

while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    country=$(echo "$result" | jq -r '.country')
    city=$(echo "$result" | jq -r '.city')
    isp=$(echo "$result" | jq -r '.isp')
    count=$(grep -c "$ip" "$ACCESS_LOG")
    
    echo "IP: $ip" >> "$OUTPUT_FILE"
    echo "访问次数: $count" >> "$OUTPUT_FILE"
    echo "位置: $country, $city" >> "$OUTPUT_FILE"
    echo "ISP: $isp" >> "$OUTPUT_FILE"
    echo "" >> "$OUTPUT_FILE"
done < high_freq_ips.txt

# 检测来自特定国家的异常访问
echo "=== 特定国家访问统计 ===" >> "$OUTPUT_FILE"
declare -A country_count

while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    country=$(echo "$result" | jq -r '.country')
    country_count["$country"]=$((${country_count["$country"]} + 1))
done < high_freq_ips.txt

for country in "${!country_count[@]}"; do
    echo "$country: ${country_count[$country]}" >> "$OUTPUT_FILE"
done | sort -t: -k2 -rn >> "$OUTPUT_FILE"

echo "异常流量检测完成,报告已保存到 $OUTPUT_FILE"

案例3: IP白名单管理#

场景描述#

基于地理位置和ISP信息,自动生成和管理IP白名单。

实施步骤#

#!/bin/bash
# IP白名单管理脚本

WHITELIST_FILE="whitelist.txt"
IP_FILE="ip_list.txt"
OUTPUT_FILE="whitelist_report.txt"

# 定义允许的国家和ISP
ALLOWED_COUNTRIES=("United States" "Canada" "United Kingdom" "Germany")
ALLOWED_ISPS=("Google LLC" "Microsoft Corporation" "Amazon.com")

echo "=== IP白名单检查报告 ===" > "$OUTPUT_FILE"
echo "检查时间: $(date)" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"

# 检查每个IP
while read ip; do
    result=$(curl -s "http://ip-api.com/json/$ip")
    country=$(echo "$result" | jq -r '.country')
    isp=$(echo "$result" | jq -r '.isp')
    
    # 检查是否在白名单中
    allowed=false
    
    for allowed_country in "${ALLOWED_COUNTRIES[@]}"; do
        if [ "$country" = "$allowed_country" ]; then
            allowed=true
            break
        fi
    done
    
    for allowed_isp in "${ALLOWED_ISPS[@]}"; do
        if [ "$isp" = "$allowed_isp" ]; then
            allowed=true
            break
        fi
    done
    
    if [ "$allowed" = true ]; then
        echo "$ip" >> "$WHITELIST_FILE"
        echo "IP: $ip - 允许 (国家: $country, ISP: $isp)" >> "$OUTPUT_FILE"
    else
        echo "IP: $ip - 拒绝 (国家: $country, ISP: $isp)" >> "$OUTPUT_FILE"
    fi
done < "$IP_FILE"

echo "" >> "$OUTPUT_FILE"
echo "白名单已更新,允许的IP已保存到 $WHITELIST_FILE"

总结#

IP-API是一款简单易用的IP地址信息查询服务,无需API密钥即可使用,适合快速查询和批量处理。

核心优势#

  • 免费使用: 无需API密钥,免费查询
  • 简单易用: RESTful API,支持多种输出格式
  • 响应快速: 查询响应速度快
  • 多格式支持: 支持JSON、XML、CSV、纯文本格式
  • 字段灵活: 可指定返回特定字段

应用场景#

  • 快速IP信息查询
  • 网站访问者分析
  • 异常流量检测
  • 地理位置分析
  • 日志分析
  • IP白名单管理

最佳实践#

  1. 请求限制: 免费版有请求频率限制,合理控制查询频率
  2. 错误处理: 始终检查查询状态,处理错误情况
  3. 缓存机制: 使用缓存减少重复查询
  4. 批量处理: 使用脚本或程序进行批量查询
  5. 数据验证: 对查询结果进行验证,确保准确性

限制说明#

  • 免费版:每分钟45次请求,不支持HTTPS
  • 付费版:更高的请求限制,支持HTTPS和高级字段
  • 不支持代理/VPN检测(付费版支持)

通过掌握IP-API的使用方法,可以快速获取IP地址的详细信息,为网络安全分析和系统管理提供有力支持。