写了个批量测机场质量的python脚本
起因:IPPure 只能看当前出口
IPPure 可以查看当前出口 IP 的一些质量信息,比如风险分、ASN、国家地区,以及是否像住宅 IP。网页很好用,但它一次只能识别「当前这条连接从哪里出去」。
后来发现它有一个公开接口:
curl -L https://my.ippure.com/v1/info
返回大概长这样:
{
"ip": "104.28.123.123",
"asn": 13335,
"asOrganization": "Cloudflare, Inc.",
"country": "United States",
"fraudScore": 75,
"isResidential": false
}
这就够了。既然接口返回的是“发起请求的出口 IP”,那想测哪个节点,就让这次请求从哪个节点出去。Claude启动!
工具的思路
这个脚本拿 mihomo 当临时代理引擎。原因很简单:mihomo 能直接吃常见机场订阅格式,不用自己重新解析一堆协议配置。
整体流程是:
- 拉取订阅,读取里面的节点;
- 启动一个临时 mihomo 实例;
- 把所有节点放进一个选择器组;
- 逐个切换节点;
- 每切到一个节点,就请求一次 IPPure API;
- 把结果按风险分排序,输出终端表格、CSV 和 Markdown 报表。
脚本本身只用 Python 标准库,不需要 pip install。第一次运行时会按系统和架构自动下载对应的 mihomo 二进制,Linux、macOS、Windows 的 amd64 / arm64 都能处理。
所有临时文件都放在工具目录里。删掉这个文件夹,系统里不会留下额外配置。
它会看哪些指标
我主要关心这几类信息:
| 字段 | 含义 |
|---|---|
| 风险分 | IPPure 的 fraudScore,一般越低越干净 |
| 原生 | IPPure 返回的 isResidential,可粗略理解为是否更像住宅 / 家宽出口 |
| 机房 | 根据 ASN 和组织名做启发式判断,不是绝对结论 |
| ASN / 组织 | 看出口属于哪个网络或云厂商 |
| 国家地区 | 当前出口 IP 的地理位置 |
| 延迟 | mihomo 对该节点的握手延迟 |
| 状态 | ok、timeout、fail、ratelimit 等 |
这里要稍微保守一点:IP 质量评分不是法律判决书。低分通常更舒服,高分通常更麻烦,但具体能不能用,还是要看你的实际场景。
使用方式
进项目目录后直接跑:
python3 check_airport.py '<订阅URL>' --name 机场名
订阅 URL 一定要加引号。很多订阅链接里带 &,不加引号会被 shell 拆开,脚本拿到的就不是完整链接。
Windows 上可以用:
python check_airport.py '<订阅URL>' --name 机场名
或者:
py check_airport.py '<订阅URL>' --name 机场名
运行中间脚本会暂停一次,提示你先关闭本机透明代理或系统代理,比如 PassWall、OpenClash、Clash for Windows、TUN 模式之类。没开代理的话,直接回车就行。
这一步不是多余的仪式感,主要有两个原因:
- 很多机场不允许用代理 IP 拉订阅,检测到机房出口会拒绝下发;
- 如果测试时还套着当前代理,可能变成“代理套代理”,延迟和可用性判断都会被污染。
跑完会得到什么
测完以后,终端会打印一张按风险分从低到高排序的表。低风险、住宅属性更明显、延迟也合适的节点,会自然排到前面。
同时,脚本会把报表写到 results/ 目录:
results/机场名-时间戳.csv
results/机场名-时间戳.md
CSV 适合后面继续筛选,Markdown 适合直接打开看,或者丢进笔记里留档。

几个使用提醒
第一,结果里会包含真实出口 IP 和节点相关信息,不建议随手公开。项目里已经把 results/ 放进 .gitignore,但自己转发文件时还是要留意。
第二,fraudScore 只是第三方风险评分。它适合帮你快速筛掉明显不舒服的出口,但不能保证某个网站一定放行,也不能保证某个节点永远稳定。
第三,如果节点很多,建议保留默认间隔,或者适当调大 --gap。批量请求公共接口要克制一点,工具是拿来省事的,不是拿来把别人服务打冒烟的。
第四,第一次运行需要能访问 GitHub,因为 mihomo 二进制会从 GitHub Releases 下载。后续会复用本地 bin/ 里的文件,并做校验。
代码地址
项目放在这里: