geoip
SKILL.md
GeoIP
用本 skill 处理“给我一个 IP,查它的地理位置/运营商/ASN”等需求。默认同时查询 Cloudflare 与 MaxMind,并输出综合结果。
输入约束
- 只接受 IP 字符串(IPv4/IPv6)。
- 如果用户给的是域名/URL:先让用户提供 IP(本 skill 不包含 DNS 解析脚本)。
- 如果是内网/保留地址(如
10.0.0.0/8,192.168.0.0/16,127.0.0.1,::1):直接说明这是非公网地址,GeoIP 通常无意义;除非用户明确要继续。
数据源与查询策略
- Cloudflare:需要
CLOUDFLARE_API_TOKEN,走api.cloudflare.com。 - MaxMind demo:无需 token,但依赖网页/CSRF/token 流程,可能随时变更、限流或返回非预期页面。
默认策略(重点):
- 只要
CLOUDFLARE_API_TOKEN已设置,就同时查询 Cloudflare 和 MaxMind(可并发执行)。 - 若未设置
CLOUDFLARE_API_TOKEN,只查 MaxMind,并在结果中标注 Cloudflare 未执行。 - 若其中一个源失败,仍返回另一个源结果,并清楚标注失败源的错误信息。
- 综合结果按字段合并:优先 Cloudflare,缺失字段再回填 MaxMind(同时保留双源原始 JSON 便于核对)。
代理
两个脚本都支持读取 https_proxy 环境变量(例如 http://127.0.0.1:7890)。
运行脚本
从仓库根目录运行(确保能找到依赖的 node_modules/):
# Cloudflare
node skills/geoip/scripts/cloudflare-geoip.mjs <ip>
# MaxMind demo
node skills/geoip/scripts/maxmind-geoip.mjs <ip>
# 同时查询(推荐)
(
node skills/geoip/scripts/cloudflare-geoip.mjs <ip> > /tmp/geoip-cloudflare.json &
node skills/geoip/scripts/maxmind-geoip.mjs <ip> > /tmp/geoip-maxmind.json &
wait
)
Cloudflare 需要:
export CLOUDFLARE_API_TOKEN="..."
输出与交付格式
各脚本会把上游响应 原样 JSON pretty-print 输出到 stdout。
对用户的最终回答按两层输出:
- 综合归一化摘要:
ip,country,region,city,latitude,longitude,timezone,postal,asn,org/isp。 - 字段来源标注:为关键字段标注来源(Cloudflare / MaxMind / merged-fallback)。
- 双源状态:
cloudflare_status,maxmind_status(success / failed / skipped)。 - 双源原始 JSON:如果用户要“完整输出/调试”,附上两个脚本输出(或说明保存路径)。
综合字段优先级(默认):
- 定位与网络字段(国家/地区/城市/ASN/组织)优先 Cloudflare,缺失时回填 MaxMind。
- 经纬度/时区/邮编按“先 Cloudflare 后 MaxMind”回填。
- 若两源同字段冲突,摘要中用优先值,并在备注里写明冲突值(例如
city: "A" (MaxMind: "B"))。
如果用户给了多个 IP:
- 每个 IP 都尽量双源查询并综合;最后给简短表格(IP -> 国家/城市/ASN/来源状态),需要时附每个 IP 的详细双源 JSON。
常见问题排查
- Cloudflare 报错
please set env CLOUDFLARE_API_TOKEN:让用户设置CLOUDFLARE_API_TOKEN,然后重试。 - MaxMind demo 返回解析失败/非 JSON:优先判定为上游页面变更或风控;保留 Cloudflare 结果并标注 MaxMind 失败。
- 网络不通:确认是否需要
https_proxy,以及代理是否支持 HTTPS CONNECT。
Weekly Installs
3
Repository
robberphex/skillsFirst Seen
Feb 17, 2026
Security Audits
Installed on
gemini-cli3
github-copilot3
codex3
kimi-cli3
opencode3
amp3