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-cliLinux/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.comAPI密钥配置#
获取API密钥#
- 访问 https://ipinfo.io/signup
- 注册账号
- 获取免费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查询和数据分析
最佳实践#
- API密钥管理: 妥善保管API密钥,避免泄露
- 批量查询优化: 合理设置查询间隔,避免超过API限制
- 数据验证: 对查询结果进行验证,确保准确性
- 日志记录: 记录查询历史,便于审计和分析
- 自动化监控: 结合脚本实现自动化监控和告警
通过掌握IPinfo的各种功能和使用技巧,可以有效地进行IP地址信息收集和分析,为网络安全工作提供有力支持。