安全日志导出三千条登录记录,全是 IP,领导要一份按地区统计的表。复制第一条去网页查,再复制第二条,查二十条手就酸了。
ip批量查询的核心是脚本加接口,或者本地库。选哪种,看数据量和精度要求。
先做三件小事
去重,同一个 IP 出现几十次很正常,先去重再查,请求量能少一大半。剔除内网地址,10 开头、172.16 到 172.31、192.168 开头的是局域网地址,查不到归属地。检查格式,IPv6 和 IPv4 要分开处理,别混在一个文件里。
接口查询:几十行脚本搞定
多数免费接口按 GET 请求返回 JSON,带国家、省市、运营商、ASN。命令行就能跑:
while read ip; do echo -n $ip; curl -s http://ip-api.com/json/$ip; echo; done < ips.txt把结果重定向到文件,再导入 Excel 分列。免费接口一般有频率限制,一分钟几十次,几千条要加 sleep 控制节奏,不然会被限流甚至封 IP。
本地库:数据量大时更省事
MaxMind 的 GeoLite2、IP2Location 的免费库都能离线查,下载后按官方示例加载,一条 SQL 或一次内存查询就出结果。优点是快、不依赖网络,缺点是库要定期更新,城市级准确率一般七八成,机房 IP 和代理 IP 偏差更大。
结果怎么用才不冤枉人
IP 归属地只能说明出口位置,不能证明是谁在用。同一个公司、同一个小区共用一个出口,查出来全是同一个城市。移动网络出口漂移更明显,同一部手机上午下午可能显示两个省。
要定位到人,得靠登录日志、设备指纹、时间戳交叉比对,单靠 IP 归属地下结论容易误伤。做风控的话,把 IP 段、ASN、是否代理一起看,比只看城市靠谱。
做完 ip批量查询,把结果按省份汇总,再对照登录时间看异常。凌晨三点从三个省登录同一个账号,这种才值得进一步查。别只盯城市名,运营商和 ASN 也能看出是家宽还是机房。
结论:几百条用接口脚本,几万条用离线库;结果当线索,别当证据。