DNS 2026 年 3 月 29 日

ReachProbeApi 项目简介与使用指南

ReachProbeApi 项目简介与使用指南 这篇文章围绕「ReachProbeApi 项目简介与使用指南」整理了可直接落地的步骤,适合按顺序操作并逐项验证结果。 项目是什么 以下信息为公开套餐与经验整理,具体价格和库存请以下单页实时展示为准。 ReachProbeApi 是一

ReachProbeApi 项目简介与使用指南

这篇文章围绕「ReachProbeApi 项目简介与使用指南」整理了可直接落地的步骤,适合按顺序操作并逐项验证结果。

项目是什么

以下信息为公开套餐与经验整理,具体价格和库存请以下单页实时展示为准。
ReachProbeApi 是一个轻量级的 HTTP API 服务,用于对指定域名或 IP 与端口做 TCP 可达性探测。服务会按需解析 DNS,对解析出的地址做 IP 策略校验,再发起 TCP 连接尝试,并返回是否可达、尝试次数、耗时等信息。
适合场景包括:运维探活、网络连通性自检、脚本里快速判断「某主机某端口是否能连上」等,而不需要自己写套接字与超时逻辑。

主要特性

能力说明
单文件运行核心逻辑集中在 main.py,部署简单
配置灵活支持 config.json,且可用环境变量覆盖
探活接口POST /reachprobeapi/v1
健康检查GET /healthz
可选鉴权通过请求头 X-API-Key 启用 API Key
限流进程内内存限流,减轻滥用
IP 策略可限制私网、回环、组播、保留地址等
有界探测通过时间预算等限制,避免单次请求拖很久

目录结构

.
├── main.py
├── config.json
├── requirements.txt
└── tests/

快速开始

1. 安装依赖

python3 -m venv .venv
source .venv/bin/activate   # Windows 可用 .venv\Scripts\activate
pip install -r requirements.txt

2. 启动服务

python3 main.py
默认监听 0.0.0.0:8899。

3. 使用 PM2 守护(可选)

pm2 start main.py --interpreter python3 --name reachprobeapi

API 说明

POST /reachprobeapi/v1

对 target + port 做 TCP 探测。
请求体示例:
{
  "target": "dns.google",
  "port": 443
}
target 可以是主机名、IPv4 或 IPv6;需要时会先 DNS 解析。
响应体示例:
{
  "target": "dns.google",
  "port": 443,
  "resolved_addresses": ["8.8.8.8", "8.8.4.4"],
  "reachable": true,
  "attempts": 3,
  "successful_connects": 2,
  "duration_ms": 137
}
字段含义一目了然:reachable 表示是否至少有一次 TCP 连接成功;attempts / successful_connects 反映多轮探测结果;duration_ms 为本次请求侧耗时。

GET /healthz

用于负载均衡或编排层面的存活检查:
{
  "status": "ok"
}

使用示例(curl)

1)探测公共 DNS 端口
curl -sS -X POST "http://127.0.0.1:8899/reachprobeapi/v1" \
  -H "Content-Type: application/json" \
  -d '{"target":"dns.google","port":53}'
2)探测 HTTPS 是否可达
curl -sS -X POST "http://127.0.0.1:8899/reachprobeapi/v1" \
  -H "Content-Type: application/json" \
  -d '{"target":"example.com","port":443}'
3)直接使用 IPv4
curl -sS -X POST "http://127.0.0.1:8899/reachprobeapi/v1" \
  -H "Content-Type: application/json" \
  -d '{"target":"1.1.1.1","port":443}'
4)直接使用 IPv6
curl -sS -X POST "http://127.0.0.1:8899/reachprobeapi/v1" \
  -H "Content-Type: application/json" \
  -d '{"target":"2606:4700:4700::1111","port":443}'
5)启用 API Key(需在配置中开启 require_api_key 并设置 api_key)
curl -sS -X POST "http://127.0.0.1:8899/reachprobeapi/v1" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: change_me" \
  -d '{"target":"example.com","port":443}'
6)用 jq 只提取关键字段
curl -sS -X POST "http://127.0.0.1:8899/reachprobeapi/v1" \
  -H "Content-Type: application/json" \
  -d '{"target":"dns.google","port":443}' | jq '{target, reachable, successful_connects, duration_ms}'

配置说明

加载顺序为:代码默认值 → config.json → 环境变量(环境变量优先级最高)。
指定其它配置文件:
export IPTOOLS_CONFIG_FILE=/path/to/config.json

常用配置项

config.json 键环境变量默认值说明
telnet_countTELNET_COUNT3探测轮数,范围 1..10
telnet_timeout_secTELNET_TIMEOUT_SEC1单次连接超时(秒),1..5
max_resolved_addressesMAX_RESOLVED_ADDRESSES4最多使用几条 DNS 结果,1..16
probe_time_budget_secPROBE_TIME_BUDGET_SEC10单次请求总时间上限(秒),1..60
require_api_keyREQUIRE_API_KEYfalse是否要求 X-API-Key
api_keyAPI_KEYnullAPI Key 明文
rate_limit_requestsRATE_LIMIT_REQUESTS30限流窗口内允许请求数
rate_limit_window_secRATE_LIMIT_WINDOW_SEC60限流窗口长度(秒)
allow_private_ipALLOW_PRIVATE_IPfalse是否允许探测私网 IP
allow_loopback_ipALLOW_LOOPBACK_IPfalse是否允许回环地址
allow_multicast_ipALLOW_MULTICAST_IPfalse是否允许多播地址
allow_reserved_ipALLOW_RESERVED_IPfalse是否允许保留地址
server_hostSERVER_HOST0.0.0.0监听地址
server_portSERVER_PORT8899监听端口

生产环境环境变量示例

export REQUIRE_API_KEY=true
export API_KEY='replace_with_strong_key'
export RATE_LIMIT_REQUESTS=20
export RATE_LIMIT_WINDOW_SEC=60
export TELNET_COUNT=2
export TELNET_TIMEOUT_SEC=1
export MAX_RESOLVED_ADDRESSES=4
export PROBE_TIME_BUDGET_SEC=8

公网部署时的安全建议

此类服务若对公网开放,可能被用于扫描他人内网或第三方资产,需格外谨慎:
  • 除非完全信任调用方,否则保持 ALLOW_PRIVATE_IP=false、ALLOW_LOOPBACK_IP=false。
  • 对外暴露前务必开启 API Key,并配合网关做 TLS、WAF、IP 白名单 等。
  • 在网络层尽量限制出站访问范围,并对进程做 CPU、内存与日志监控。

小结

ReachProbeApi 把「域名/IP + 端口 → TCP 是否可达」封装成稳定、可配置的 HTTP 接口,适合集成到自动化运维或自建探活流程中。更多细节与更新以官方仓库 README 为准:ReachProbeApi on GitHub。