where-is-my-ip 是一个小型实用工具,用于查询当前出站出口 IP 及其地理位置信息。它通过请求 ifconfig.co/json 获取外部世界看到的出站 IP,并打印国家、城市、ASN 和延迟等数据。该技能同时作为 byo-proxy 的规范示例,展示如何从其他技能中消费 byo-proxy(两种可选模式)。
主要能力
该工具提供三种运行模式:
-
直接模式:不经过代理,检查原始出口 IP。 python3 $SKILL/scripts/check.py
-
模式 A(显式):将单次检查路由到指定的提供商/国家。 python3 $SKILL/scripts/check.py --via iproyal:jp python3 $SKILL/scripts/check.py --via iproyal:de --sticky 30
-
模式 B(绑定):使用用户为此技能配置的代理。 python3 $SKILL/scripts/check.py --use-binding
此外还提供并排对比功能,一次显示直接出口与代理出口: python3 $SKILL/scripts/check.py --compare iproyal:jp
当传入 --use-binding 且 where-is-my-ip 尚未绑定时,byo-proxy 的 ProxyNotConfiguredError 会触发,并附带多行引导信息,告知用户需要运行什么命令。脚本会打印该信息并以非零状态退出。
使用方式
该技能通过命令行脚本调用,脚本路径为 $SKILL/scripts/check.py,其中 SKILL 通常为 /data/workspace/skills/where-is-my-ip。用户可根据需要选择直接检查、指定代理检查或使用绑定配置。
输出示例(单次检查): 📍 exit 198.51.100.42 country JP (Japan) city Tokyo, Tokyo asn AS17676 SoftBank Corp. latency 234 ms via iproyal/jp (sticky 30m)
输出示例(--compare): exit_ip country city asn direct 203.0.113.5 CN Beijing AS4134 China Telecom iproyal/jp 198.51.100.42 JP Tokyo AS17676 SoftBank Corp. ✅ matches request
适用场景
该技能存在两个主要用途:
-
验证住宅代理:在启动长时间爬取任务之前,运行 --via iproyal:jp 确认出口确实位于日本。IPRoyal 在请求池耗尽时偶尔会轮换到附近国家;该工具能立即暴露这种情况,而不是在 200 个请求失败后才发现。
-
作为 byo-proxy 的参考实现:scripts/check.py 代码简短(约 120 行),演示了两种消费模式。需要地理路由的新技能可以复制其代理获取代码块。
与 byo-proxy 的集成
scripts/check.py 仅通过以下方式获取代理:
import sys
sys.path.insert(0, "/data/workspace/skills/byo-proxy")
from exports import get_proxy_url, get_proxy_for_skill, ProxyNotConfiguredError
如果编写需要住宅路由的新技能,同样的两个导入就足够了。byo-proxy 从不自动附加——仅当调用上述函数之一时才起作用,并且会抛出异常(附带引导信息)而不是静默回退到直接连接。
文件结构
where-is-my-ip/ ├── SKILL.md └── scripts/ └── check.py # 整个技能——单文件演示
限制
该工具依赖 ifconfig.co/json 服务,其可用性和准确性受该服务影响。代理功能依赖 byo-proxy 技能及其配置。未提供关于收费、价格或平台支持的详细信息。