IPinfo使用教程#

软件介绍#

IPinfo是一款强大的IP地址信息查询工具,提供详细的IP地址地理位置、ISP、ASN、域名、VPN检测等信息。它支持命令行工具、API接口和Web界面,是网络安全、渗透测试和系统管理的重要工具。

主要功能#

  • IP地址地理位置查询
  • ISP和ASN信息获取
  • 域名解析查询
  • VPN/代理检测
  • 批量IP查询
  • 历史数据查询
  • 隐私检测
  • 托管服务识别

适用场景#

  • 网络安全分析
  • 渗透测试
  • 风险评估
  • 地理位置分析
  • 流量分析
  • 威胁情报收集

入门级使用#

安装IPinfo#

Windows系统#

# 使用pip安装
pip install ipinfo

# 或使用npm安装
npm install -g ipinfo-cli

Linux/macOS系统#

# 使用pip安装
pip install ipinfo

# 或使用npm安装
npm install -g ipinfo-cli

# 或下载二进制文件
wget https://github.com/ipinfo/cli/releases/latest/download/ipinfo-amd64
chmod +x ipinfo-amd64
sudo mv ipinfo-amd64 /usr/local/bin/ipinfo

基本IP查询#

查询单个IP地址#

# 基本查询
ipinfo 8.8.8.8

# 输出示例
{
  "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"
}

查询当前IP#

# 查询本机IP信息
ipinfo

# 输出当前IP的详细信息

JSON格式输出#

# 以JSON格式输出
ipinfo 8.8.8.8 --json

# 美化JSON输出
ipinfo 8.8.8.8 --json | jq .

基本信息字段说明#

  • ip: IP地址
  • hostname: 主机名
  • city: 城市
  • region: 州/省
  • country: 国家代码
  • loc: 经纬度坐标
  • org: 组织信息(ASN)
  • postal: 邮政编码
  • timezone: 时区

初级使用#

批量IP查询#

从文件读取IP列表#

# 创建IP列表文件
cat > ip_list.txt << EOF
8.8.8.8
1.1.1.1
208.67.222.222
EOF

# 批量查询
ipinfo 8.8.8.8,1.1.1.1,208.67.222.222

# 或从文件读取
while read ip; do
    ipinfo "$ip"
done < ip_list.txt

查询特定字段#

# 只查询地理位置
ipinfo 8.8.8.8 --field city,region,country

# 只查询ISP信息
ipinfo 8.8.8.8 --field org

# 只查询经纬度
ipinfo 8.8.8.8 --field loc

域名查询#

域名解析查询#

# 查询域名的IP信息
ipinfo google.com

# 查询多个域名
ipinfo google.com,facebook.com,twitter.com

API密钥配置#

获取API密钥#

  1. 访问 https://ipinfo.io/signup
  2. 注册账号
  3. 获取免费API密钥

配置API密钥#

# 设置环境变量
export IPINFO_TOKEN="your_api_key"

# 或在命令中指定
ipinfo 8.8.8.8 --token "your_api_key"

# 或创建配置文件
mkdir -p ~/.ipinfo
echo "token = your_api_key" > ~/.ipinfo/config

中级使用#

ASN查询#

查询ASN信息#

# 查询特定ASN
ipinfo AS15169

# 查询ASN的IP范围
ipinfo AS15169 --field prefix

# 查询ASN的详细信息
ipinfo AS15169 --json | jq .

批量ASN查询#

# 查询多个ASN
ipinfo AS15169,AS13335,AS16509

# 从文件查询ASN
cat > asn_list.txt << EOF
AS15169
AS13335
AS16509
EOF

while read asn; do
    ipinfo "$asn"
done < asn_list.txt

隐私检测#

VPN/代理检测#

# 检测IP是否为VPN
ipinfo 8.8.8.8 --field privacy

# 检测多个IP的隐私状态
ipinfo 8.8.8.8,1.1.1.1 --field privacy

# 输出示例
{
  "vpn": false,
  "proxy": false,
  "tor": false,
  "relay": false,
  "hosting": false,
  "service": ""
}

托管服务检测#

# 检测IP是否为托管服务
ipinfo 8.8.8.8 --field privacy.hosting

# 检测是否为云服务
ipinfo 8.8.8.8 --field privacy.service

历史数据查询#

查询IP历史信息#

# 查询IP的历史数据
ipinfo 8.8.8.8 --history

# 查询特定时间范围的历史数据
ipinfo 8.8.8.8 --history --start-date "2024-01-01" --end-date "2024-12-31"

中上级使用#

高级过滤#

按国家过滤#

# 查询特定国家的IP
ipinfo 8.8.8.8 --filter country=US

# 查询多个国家
ipinfo 8.8.8.8 --filter country=US,CN,JP

按ISP过滤#

# 查询特定ISP的IP
ipinfo 8.8.8.8 --filter org="Google LLC"

# 按ASN过滤
ipinfo 8.8.8.8 --filter org="AS15169"

数据导出#

导出为CSV#

# 导出为CSV格式
ipinfo 8.8.8.8 --format csv

# 批量导出
ipinfo 8.8.8.8,1.1.1.1,208.67.222.222 --format csv > ip_info.csv

导出为JSON#

# 导出为JSON格式
ipinfo 8.8.8.8 --json > ip_info.json

# 批量导出
for ip in 8.8.8.8 1.1.1.1 208.67.222.222; do
    ipinfo "$ip" --json >> ip_list.json
done

自定义脚本#

Python脚本示例#

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

# 初始化API
handler = ipinfo.getHandler(access_token='your_api_key')

# 查询单个IP
ip_address = '8.8.8.8'
details = handler.getDetails(ip_address)
print(json.dumps(details, indent=2))

# 批量查询
ip_list = ['8.8.8.8', '1.1.1.1', '208.67.222.222']
for ip in ip_list:
    details = handler.getDetails(ip)
    print(f"{ip}: {details['city']}, {details['country']}")

Bash脚本示例#

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

API_KEY="your_api_key"
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
    ipinfo "$ip" --token "$API_KEY" --json >> "$OUTPUT_FILE"
done < "$IP_FILE"

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

高级使用#

网络拓扑分析#

分析ASN网络#

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

ASN=$1
echo "分析ASN: $ASN"

# 获取ASN信息
ipinfo "$ASN" --json > asn_info.json

# 提取IP前缀
prefix=$(jq -r '.prefix' asn_info.json)
echo "IP前缀: $prefix"

# 获取ASN名称
name=$(jq -r '.name' asn_info.json)
echo "ASN名称: $name"

# 分析网络规模
echo "网络规模分析:"
echo "IP前缀数量: $(echo "$prefix" | wc -l)"

地理位置分析#

#!/bin/bash
# 地理位置分析脚本

IP_FILE="ip_list.txt"
OUTPUT_FILE="geo_analysis.txt"

echo "IP地址,城市,地区,国家,经纬度" > "$OUTPUT_FILE"

while read ip; do
    info=$(ipinfo "$ip" --json)
    city=$(echo "$info" | jq -r '.city')
    region=$(echo "$info" | jq -r '.region')
    country=$(echo "$info" | jq -r '.country')
    loc=$(echo "$info" | jq -r '.loc')
    echo "$ip,$city,$region,$country,$loc" >> "$OUTPUT_FILE"
done < "$IP_FILE"

echo "地理位置分析完成,结果已保存到 $OUTPUT_FILE"

威胁情报集成#

风险IP检测#

#!/bin/bash
# 风险IP检测脚本

IP_FILE="ip_list.txt"
OUTPUT_FILE="risk_analysis.txt"

echo "IP地址,VPN,代理,TOR,中继,托管,服务" > "$OUTPUT_FILE"

while read ip; do
    privacy=$(ipinfo "$ip" --field privacy --json)
    vpn=$(echo "$privacy" | jq -r '.vpn')
    proxy=$(echo "$privacy" | jq -r '.proxy')
    tor=$(echo "$privacy" | jq -r '.tor')
    relay=$(echo "$privacy" | jq -r '.relay')
    hosting=$(echo "$privacy" | jq -r '.hosting')
    service=$(echo "$privacy" | jq -r '.service')
    echo "$ip,$vpn,$proxy,$tor,$relay,$hosting,$service" >> "$OUTPUT_FILE"
done < "$IP_FILE"

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

可疑活动监控#

#!/bin/bash
# 可疑活动监控脚本

LOG_FILE="/var/log/auth.log"
OUTPUT_FILE="suspicious_ips.txt"

# 提取失败登录的IP
grep "Failed password" "$LOG_FILE" | awk '{print $(NF-3)}' | sort -u > temp_ips.txt

# 分析每个IP
while read ip; do
    privacy=$(ipinfo "$ip" --field privacy --json)
    vpn=$(echo "$privacy" | jq -r '.vpn')
    tor=$(echo "$privacy" | jq -r '.tor')
    hosting=$(echo "$privacy" | jq -r '.hosting')
    
    if [ "$vpn" = "true" ] || [ "$tor" = "true" ] || [ "$hosting" = "true" ]; then
        echo "$ip" >> "$OUTPUT_FILE"
    fi
done < temp_ips.txt

echo "可疑IP列表已保存到 $OUTPUT_FILE"

大师级使用#

自动化监控#

持续监控脚本#

#!/bin/bash
# IP地址持续监控脚本

MONITOR_FILE="monitor_ips.txt"
LOG_FILE="monitor_log.txt"
INTERVAL=3600  # 每小时检查一次

while true; do
    echo "$(date): 开始监控" >> "$LOG_FILE"
    
    while read ip; do
        current_info=$(ipinfo "$ip" --json)
        city=$(echo "$current_info" | jq -r '.city')
        org=$(echo "$current_info" | jq -r '.org')
        
        echo "$(date): $IP - $city - $org" >> "$LOG_FILE"
        
        # 检查是否有变化
        if [ -f "last_info_$ip.txt" ]; then
            diff "last_info_$ip.txt" <(echo "$current_info") > /dev/null
            if [ $? -ne 0 ]; then
                echo "$(date): $IP 信息发生变化" >> "$LOG_FILE"
            fi
        fi
        
        echo "$current_info" > "last_info_$ip.txt"
    done < "$MONITOR_FILE"
    
    echo "$(date): 监控周期完成" >> "$LOG_FILE"
    sleep "$INTERVAL"
done

实时告警系统#

#!/bin/bash
# 实时告警系统

THRESHOLD=5
LOG_FILE="/var/log/nginx/access.log"
ALERT_FILE="alerts.txt"

# 分析访问日志
tail -f "$LOG_FILE" | while read line; do
    ip=$(echo "$line" | awk '{print $1}')
    
    # 检查IP访问频率
    count=$(grep "$ip" "$LOG_FILE" | wc -l)
    
    if [ "$count" -gt "$THRESHOLD" ]; then
        # 检查IP是否为风险IP
        privacy=$(ipinfo "$ip" --field privacy --json)
        vpn=$(echo "$privacy" | jq -r '.vpn')
        tor=$(echo "$privacy" | jq -r '.tor')
        
        if [ "$vpn" = "true" ] || [ "$tor" = "true" ]; then
            alert_msg="$(date): 风险IP访问 - $IP (VPN: $vpn, TOR: $tor)"
            echo "$alert_msg" >> "$ALERT_FILE"
            echo "$alert_msg"
        fi
    fi
done

数据分析#

统计分析#

#!/bin/bash
# IP地址统计分析脚本

IP_FILE="ip_list.txt"
OUTPUT_FILE="statistics.txt"

echo "=== IP地址统计分析 ===" > "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"

# 统计国家分布
echo "国家分布:" >> "$OUTPUT_FILE"
while read ip; do
    country=$(ipinfo "$ip" --field country)
    echo "$country" >> temp_countries.txt
done < "$IP_FILE"
sort temp_countries.txt | uniq -c | sort -rn >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"

# 统计ISP分布
echo "ISP分布:" >> "$OUTPUT_FILE"
while read ip; do
    org=$(ipinfo "$ip" --field org)
    echo "$org" >> temp_orgs.txt
done < "$IP_FILE"
sort temp_orgs.txt | uniq -c | sort -rn >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"

# 统计风险IP
echo "风险IP统计:" >> "$OUTPUT_FILE"
risk_count=0
while read ip; do
    privacy=$(ipinfo "$ip" --field privacy --json)
    vpn=$(echo "$privacy" | jq -r '.vpn')
    tor=$(echo "$privacy" | jq -r '.tor')
    
    if [ "$vpn" = "true" ] || [ "$tor" = "true" ]; then
        risk_count=$((risk_count + 1))
        echo "$ip" >> temp_risk.txt
    fi
done < "$IP_FILE"
echo "风险IP数量: $risk_count" >> "$OUTPUT_FILE"

# 清理临时文件
rm -f temp_countries.txt temp_orgs.txt temp_risk.txt

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

地理可视化数据#

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

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

echo "[" > "$OUTPUT_FILE"

first=true
while read ip; do
    info=$(ipinfo "$ip" --json)
    city=$(echo "$info" | jq -r '.city')
    country=$(echo "$info" | jq -r '.country')
    loc=$(echo "$info" | jq -r '.loc')
    lat=$(echo "$loc" | cut -d',' -f1)
    lon=$(echo "$loc" | cut -d',' -f2)
    
    if [ "$first" = true ]; then
        first=false
    else
        echo "," >> "$OUTPUT_FILE"
    fi
    
    echo "{\"ip\":\"$ip\",\"city\":\"$city\",\"country\":\"$country\",\"lat\":$lat,\"lon\":$lon}" >> "$OUTPUT_FILE"
done < "$IP_FILE"

echo "]" >> "$OUTPUT_FILE"
echo "地理数据已生成,可用于地图可视化"

实战案例#

案例1: 网络入侵检测#

场景描述#

检测服务器日志中的可疑IP访问,识别来自VPN、TOR或托管服务的连接。

实施步骤#

#!/bin/bash
# 网络入侵检测脚本

ACCESS_LOG="/var/log/nginx/access.log"
THRESHOLD=10
OUTPUT_FILE="intrusion_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
    count=$(grep -c "$ip" "$ACCESS_LOG")
    privacy=$(ipinfo "$ip" --field privacy --json)
    vpn=$(echo "$privacy" | jq -r '.vpn')
    tor=$(echo "$privacy" | jq -r '.tor')
    hosting=$(echo "$privacy" | jq -r '.hosting')
    
    if [ "$vpn" = "true" ] || [ "$tor" = "true" ] || [ "$hosting" = "true" ]; then
        echo "IP: $ip" >> "$OUTPUT_FILE"
        echo "访问次数: $count" >> "$OUTPUT_FILE"
        echo "VPN: $vpn, TOR: $tor, 托管: $hosting" >> "$OUTPUT_FILE"
        echo "" >> "$OUTPUT_FILE"
    fi
done < high_freq_ips.txt

echo "检测完成,报告已保存到 $OUTPUT_FILE"

案例2: 地理位置分析#

场景描述#

分析网站访问者的地理分布,了解用户来源和访问模式。

实施步骤#

#!/bin/bash
# 地理位置分析脚本

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

# 按国家统计
echo "=== 按国家统计 ===" > "$OUTPUT_DIR/by_country.txt"
awk '{print $1}' "$ACCESS_LOG" | sort -u > unique_ips.txt

while read ip; do
    country=$(ipinfo "$ip" --field country)
    echo "$country" >> temp_countries.txt
done < unique_ips.txt

sort temp_countries.txt | uniq -c | sort -rn >> "$OUTPUT_DIR/by_country.txt"

# 按城市统计
echo "=== 按城市统计 ===" > "$OUTPUT_DIR/by_city.txt"
while read ip; do
    city=$(ipinfo "$ip" --field city)
    echo "$city" >> temp_cities.txt
done < unique_ips.txt

sort temp_cities.txt | uniq -c | sort -rn | head -50 >> "$OUTPUT_DIR/by_city.txt"

# 生成地图数据
echo "[" > "$OUTPUT_DIR/map_data.json"
first=true
while read ip; do
    info=$(ipinfo "$ip" --json)
    loc=$(echo "$info" | jq -r '.loc')
    if [ "$loc" != "null" ] && [ -n "$loc" ]; then
        if [ "$first" = true ]; then
            first=false
        else
            echo "," >> "$OUTPUT_DIR/map_data.json"
        fi
        echo "{\"ip\":\"$ip\",\"loc\":\"$loc\"}" >> "$OUTPUT_DIR/map_data.json"
    fi
done < unique_ips.txt
echo "]" >> "$OUTPUT_DIR/map_data.json"

# 清理临时文件
rm -f unique_ips.txt temp_countries.txt temp_cities.txt

echo "地理位置分析完成,结果保存在 $OUTPUT_DIR 目录"

案例3: 批量IP风险评估#

场景描述#

对一批IP地址进行风险评估,识别潜在的威胁和可疑活动。

实施步骤#

#!/bin/bash
# 批量IP风险评估脚本

IP_FILE="ip_list.txt"
OUTPUT_FILE="risk_assessment.txt"

echo "=== IP风险评估报告 ===" > "$OUTPUT_FILE"
echo "评估时间: $(date)" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"

total_count=0
risk_count=0
high_risk_count=0

while read ip; do
    total_count=$((total_count + 1))
    
    privacy=$(ipinfo "$ip" --field privacy --json)
    vpn=$(echo "$privacy" | jq -r '.vpn')
    proxy=$(echo "$privacy" | jq -r '.proxy')
    tor=$(echo "$privacy" | jq -r '.tor')
    relay=$(echo "$privacy" | jq -r '.relay')
    hosting=$(echo "$privacy" | jq -r '.hosting')
    service=$(echo "$privacy" | jq -r '.service')
    
    risk_level="低"
    if [ "$vpn" = "true" ] || [ "$tor" = "true" ]; then
        risk_level="高"
        high_risk_count=$((high_risk_count + 1))
        risk_count=$((risk_count + 1))
    elif [ "$proxy" = "true" ] || [ "$relay" = "true" ] || [ "$hosting" = "true" ]; then
        risk_level="中"
        risk_count=$((risk_count + 1))
    fi
    
    if [ "$risk_level" != "低" ]; then
        echo "IP: $ip" >> "$OUTPUT_FILE"
        echo "风险等级: $risk_level" >> "$OUTPUT_FILE"
        echo "VPN: $vpn, 代理: $proxy, TOR: $tor" >> "$OUTPUT_FILE"
        echo "中继: $relay, 托管: $hosting" >> "$OUTPUT_FILE"
        if [ -n "$service" ]; then
            echo "服务: $service" >> "$OUTPUT_FILE"
        fi
        echo "" >> "$OUTPUT_FILE"
    fi
done < "$IP_FILE"

echo "=== 统计摘要 ===" >> "$OUTPUT_FILE"
echo "总IP数量: $total_count" >> "$OUTPUT_FILE"
echo "风险IP数量: $risk_count" >> "$OUTPUT_FILE"
echo "高风险IP数量: $high_risk_count" >> "$OUTPUT_FILE"
echo "风险率: $(echo "scale=2; $risk_count * 100 / $total_count" | bc)%" >> "$OUTPUT_FILE"

echo "风险评估完成,报告已保存到 $OUTPUT_FILE"

总结#

IPinfo是一款功能强大的IP地址信息查询工具,从基础的IP查询到高级的风险评估和监控,为网络安全分析提供了全面的支持。

核心优势#

  • 准确性高: 提供准确的地理位置和ISP信息
  • 响应快速: API响应速度快,适合批量查询
  • 功能全面: 涵盖地理位置、隐私检测、历史数据等
  • 易于使用: 提供命令行工具和多种编程语言SDK
  • 数据丰富: 包含ASN、域名、托管服务等多种信息

应用场景#

  • 网络安全分析和威胁情报收集
  • 渗透测试和风险评估
  • 地理位置分析和用户行为分析
  • 网络入侵检测和实时监控
  • 批量IP查询和数据分析

最佳实践#

  1. API密钥管理: 妥善保管API密钥,避免泄露
  2. 批量查询优化: 合理设置查询间隔,避免超过API限制
  3. 数据验证: 对查询结果进行验证,确保准确性
  4. 日志记录: 记录查询历史,便于审计和分析
  5. 自动化监控: 结合脚本实现自动化监控和告警

通过掌握IPinfo的各种功能和使用技巧,可以有效地进行IP地址信息收集和分析,为网络安全工作提供有力支持。