📡 TPN Proxy — 通过 Tao Private Network (TPN) 的去中心化 SOCKS5 代理
v1.1.2TPN Proxy 技能允许您通过 Tao Private Network (TPN) 的去中心化 SOCKS5 代理发送网络请求。它支持使用 API 密钥或 x402 微支付,适用于匿名访问、地理限制内容、住宅 IP 等场景。该技能确保安全的代理生成和使用,包括输入验证、SSRF 缓解和安全的 API 交互。
详细分析 ▾
运行时依赖
版本
tpn-proxy 1.1.2 - 更新文档以澄清代理应使用内置 HTTP 工具(如 WebFetch)而非构建 shell 命令来获取 URL。- 提高了 URL 验证和代理处理的指令。- 扩展和重写 SKILL.md 中的一些安全和流程说明以提高清晰度。- 无功能/逻辑更改,仅更新文档和指南。
安装命令
点击复制技能文档
通过 Tao Private Network 的去中心化 SOCKS5 代理路由网络流量——这是一个 Bittensor 子网(SN65),在 80 多个国家有商业和住宅出口节点。
问这个技能类似的问题:
- 通过德国的代理打开 https://ipv4.icanhazip.com
- 展示一个通过美国 IP 代理 google.com 的 curl 命令
- 我需要一个日本 的 SOCKS5 代理 30 分钟
- TPN 上有哪些国家可以用于代理?
安全态势
| 方面 | 详情 |
|---|---|
| 环境变量 | TPN_API_KEY —— 仅存在性检查([ -n "$TPN_API_KEY" ]),永不回显或记录 |
| 读取/写入的文件 | 无 |
| 访问的其他密钥 | 无 —— 除了 TPN_API_KEY 外没有签名密钥或凭证 |
| 网络目的地 | api.taoprivatenetwork.com(API 调用)+ 用户指定的 URL(按步骤 5 验证) |
| x402 签名 | 完全由外部库处理(@x402/);此技能仅提供端点 URL |
这是一个行动技能
此技能执行 API 调用并直接返回结果 —— 它不会输出文档或用户要遵循的说明。
预期行为:
- 自己调用 TPN API(通过
curl或等效方式)并将完整的代理凭证返回给用户。 - 当用户要求你通过代理获取 URL 时,也自己发出该请求。
- 展示完整的 SOCKS5 凭证(用户名、密码、主机、端口)—— 这些是短期的且受限于代理租约。
- 唯一应该向用户展示如何调用 API 的情况是当他们明确问"我自己怎么做?"或类似问题时。
- 如果不存在 API 密钥,引导用户完成账户设置 —— 那是唯一只能由他们自己完成的步骤。
一个好的检查: 如果你的响应包含"你可以运行这个命令来……"或"使用这个 curl 来生成……",重新考虑 —— 用户调用这个技能是期望你运行命令并把输出交给他们。
逐步程序
每次用户请求代理或要求你通过代理获取内容时,按照此程序执行。
安全:输入验证(强制)
在构建任何 shell 命令之前,验证每个用户提供的值。永不将原始用户输入插入 shell 命令。
| 输入 | 验证规则 | |
|---|---|---|
geo | 必须是正好 2 个大写 ASCII 字母(ISO 3166-1 alpha-2)。拒绝其他任何东西。 | |
minutes | 必须是 1 到 1440 之间的正整数。拒绝非数字或超出范围的值。 | |
connection_type | 必须是以下之一:any、datacenter、residential。拒绝其他任何东西。 | |
format | 必须是以下之一:text、json。拒绝其他任何东西。 | |
| URL(步骤 5) | 必须以 http:// 或 https:// 开头,不包含 shell 元字符(` ` $ ( ) ; & | < > \n),并且是格式良好的 URL。 |
- 永不将原始用户输入直接插入 shell 命令。首先总是要验证。
- 永不通过与用户输入的字符串拼接来构建 -d
JSON payload。使用安全的静态模板,仅插入已验证的值。 使用curl时,始终引用 URL 和代理 URI 参数。优先使用智能体内置的 HTTP 工具(例如WebFetch)来获取用户指定的 URL,而不是构建curl命令。
步骤 1:解析 API 密钥
检查环境变量中是否设置了 $TPN_API_KEY(OpenClaw 会从你的配置自动注入):
测试变量:[ -n "$TPN_API_KEY" ] && echo "API key is set" || echo "API key is not set"—— 永不回显、记录或显示密钥值本身。- 如果未设置 → 检查用户是否可以通过 x402 支付(不需要 API 密钥),否则引导他们完成账户设置(参见"设置 TPN"示例)
步骤 2:选择响应格式
| 情况 | 使用 format | 原因 |
|---|---|---|
| 只需要一个可用的代理 URI | text(默认) | 无需解析 |
| 需要显示结构化的 host/port/user/pass 分解 | json | 提供各个字段 |
| 不确定 | text | 更简单,更少出错 |
如果选择 json,用 jq 解析响应:curl -s ... | jq -r '.vpnConfig.username'
如果 jq 不可用,改用 format=text —— 它返回一个不需要解析的纯 socks5:// URI。
不要使用python -c、grep、cut或其他基于 shell 的 JSON 解析回退。当与动态输入结合时,这些模式有 shell 注入风险。坚持使用jq或format=text。
步骤 3:生成代理
curl -s -X POST https://api.taoprivatenetwork.com/api/v1/proxy/generate \
-H "Content-Type: application/json" \
-H "X-API-Key: $TPN_API_KEY" \
-d '{"minutes": 60, "format": "text", "connection_type": "any"}'
将用户的请求映射到这些参数:
| 字段 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
minutes | integer | 是 | — | 租约时长(1–1440)。如未指定默认为 60。 |
geo | string | 否 | any | ISO 国家代码(如 "US"、"DE"、"JP") |
format | string | 否 | text | "text" 为 URI 字符串,"json" 为对象 |
connection_type | string | 否 | any | "any"、"datacenter" 或 "residential" |
安全的 JSON body 构建:始终将-dJSON payload 构建为带引号的静态字符串,仅插入已验证的值。在构建 curl 命令之前,按照上述验证规则验证geo(2 个大写字母)、minutes(整数 1–1440)、connection_type(枚举)和format(枚举)。永不将原始用户输入拼接到 JSON body 或命令的任何部分。
步骤 4:呈现结果
展示完整的代理凭证以便用户可以立即连接。这些是临时的(受限于租约时长)且在上下文中可以安全显示。使用 socks5h:// 方案(带 h)以确保 DNS 通过代理解析 —— 这保护用户 DNS 隐私。(当智能体在步骤 5 获取 URL 时,它使用 socks5:// —— 参见步骤 5。)包括:
结构化配置块(主机、端口、用户名、密码、方案、过期时间)完整的socks5h://URI相关的即贴即用curl示例
步骤 5:如果用户要求你获取 URL
生成代理后,自己发出请求。使用 socks5://(不是 socks5h://)以便 DNS 在本地解析 —— 连接的 IP 是已验证的 IP。
使用智能体内置的 HTTP 工具(例如 WebFetch)通过代理获取 URL。这是首选方法 —— 它完全避免了 shell 命令构建。
URL 验证 —— 获取前每一项检查都必须通过:
方案必须是http://或https://无 shell 元字符:`$();&|<>换行符- 仅限域名 —— 拒绝原始 IP 地址(IPv4 或 IPv6)
拒绝内部主机名:.internal、.local、.localhost、.localdomain、.corp、.lan、metadata.、单标签主机名- 主机名必须通过本地 DNS 解析 —— 拒绝无法解析的主机名
解析的 IP 必须是公开可路由的 —— 拒绝127.0.0.0/8、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、169.254.0.0/16、::1、fd00::/8、169.254.169.254
回退 —— curl(仅当 WebFetch 不可用时)。始终双引号引用 URL 和代理 URI:
curl --proxy "socks5://username:password@ip:port" \
--connect-timeout 10 --max-time 30 \
"https://validated-target-url.com"
将响应内容返回给用户 —— 目标是完整答案,不是他们仍需自己使用的代理。
示例
这些展示了用户具体问什么以及你应该回复什么。学习这些 —— 它们是黄金标准。
用户: "Give me a socks5 config for Belgium"
回复:
🇧🇪 Belgium SOCKS5 代理已生成!配置详情:
• 主机:be.socks5.tproxies.net
• 端口:1080
• 用户名:tpn_xxx
• 密码:xxx
• 方案:socks5h://(DNS 通过代理解析)
• 过期时间:60 分钟后
即时使用:
socks5h://tpn_xxx:xxx@be.socks5.tproxies.net:1080
curl 示例:
curl --proxy "socks5h://tpn_xxx:xxx@be.socks5.tproxies.net:1080" https://ipv4.icanhazip.com
用户: "Open https://ipv4.icanhazip.com through a proxy in Germany"
回复:
🇩🇪 正在通过德国代理获取 IP...结果:
当前 IP:89.144.XXX.XXX
位置:德国
完整响应:
89.144.XXX.XXX
用户: "Show me a curl command that proxies google.com through a US IP address"
回复:
🇺🇸 美国 IP 代理配置:curl 命令:
curl --proxy "socks5h://[用户名]:[密码]@us.socks5.tproxies.net:1080" https://www.google.com
如需获取实时凭证,请说"给我一个美国代理"或"生成美国 SOCKS5"
用户: "I need a socks5 proxy in Japan for 30 minutes"
回复:
🇯🇵 日本 SOCKS5 代理已生成!(30 分钟)配置详情:
• 主机:jp.socks5.tproxies.net
• 端口:1080
• 用户名:tpn_xxx
• 密码:xxx
• 方案:socks5h://
• 过期时间:30 分钟后(格林威治时间 18:45)
使用:
socks5h://tpn_xxx:xxx@jp.socks5.tproxies.net:1080
用户: "Which countries are available on TPN for proxies?"
回复:
🌍 TPN 代理可用国家(部分):🇺🇸 美国 🇩🇪 德国 🇬🇧 英国
🇫🇷 法国 🇯🇵 日本 🇰🇷 韩国
🇨🇦 加拿大 🇦🇺 澳大利亚 🇳🇱 荷兰
🇸🇬 新加坡 🇮🇳 印度 🇧🇷 巴西
以及更多 70+ 国家...
需要特定国家的代理?请告诉我!
用户: "How do I set up TPN?"
回复:
🔧 设置 TPN:- 访问 https://taoprivatenetwork.com 注册账户
- 获取 API 密钥
- 配置环境变量:
export TPN_API_KEY="你的-api-密钥"- 开始使用!例如:
"给我一个德国代理" 或 "通过日本代理获取这个 URL"或者,你可以通过 x402 微支付使用(无需 API 密钥):
"我希望通过 x402 支付获取代理"
API 参考
生成代理
端点: POST /api/v1/proxy/generate
请求头:
- Content-Type: application/json
X-API-Key: {your_api_key}
请求体:
{
"minutes": 60,
"geo": "US",
"format": "text",
"connection_type": "any"
}
参数:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
minutes | integer | 是 | 租约时长(1-1440 分钟) |
geo | string | 否 | ISO 3166-1 alpha-2 国家代码 |
format | string | 否 | "text" 或 "json",默认 "text" |
connection_type | string | 否 | "any"、"datacenter" 或 "residential" |
响应(format=text):
socks5h://username:password@host:port
响应(format=json):
{
"success": true,
"vpnConfig": {
"username": "username",
"password": "password",
"host": "us.socks5.tproxies.net",
"port": 1080,
"scheme": "socks5h",
"expiresAt": "2026-04-13T18:00:00Z"
}
}
检查余额
端点: GET /api/v1/user/balance
请求头:
- X-API-Key: {your_api_key}
响应:
{
"success": true,
"balance": {
"credits": 100.00,
"currency": "USD"
}
}
获取可用国家
端点: GET /api/v1/proxy/countries
响应:
{
"success": true,
"countries": [
{"code": "US", "name": "United States"},
{"code": "DE", "name": "Germany"},
...
]
}
积分成本
| 操作 | 成本 |
|---|---|
| 生成代理(每分钟) | ~$0.01/分钟 |
| 住宅代理 | 更高(根据需求) |
| 数据传输 | 按流量计费 |
具体价格请参阅:https://taoprivatenetwork.com/pricing
故障排除和操作说明
代理连接问题
- 检查凭证是否过期
- 代理凭证有租约时间,过期后需要重新生成
- 说"刷新代理"获取新凭证- 验证国家可用性
- 某些国家可能有有限容量
- 尝试其他国家或等待- 检查连接类型
- 住宅代理更慢但更可靠
- 数据中心代理更快但更容易被检测常见错误
错误 解决方案 "API key not set" 设置 TPN_API_KEY 环境变量 "Insufficient credits" 充值账户 "Country not available" 尝试其他国家 "Connection timeout" 重试或尝试其他代理
性能优化
- 住宅 vs 数据中心:住宅代理更慢但更難被检测,适合爬虫和数据采集
- 邻近国家:选择物理位置接近的目标服务器的国家
- 专用会话:需要稳定连接时说"我需要一个专用代理"
x402 支付流程(高级)
如果用户没有 API 密钥但有加密货币,可以通过 x402 微支付使用 TPN:
- 用户说"我希望通过 x402 支付"
- 你提供 x402 支付端点
- 用户直接支付
- 支付确认后,生成代理
端点: https://api.taoprivatenetwork.com/api/v1/proxy/generate-x402`
x402 头部:
x402-amount: 0.05
x402-accept: true
x402-payment-url: https://payment.example.com/pay
链接
- 官网:https://taoprivatenetwork.com
- 文档:https://docs.taoprivatenetwork.com
- 支持:https://taoprivatenetwork.com/support
- x402:https://www.x402.org