Repository navigation
Releases
Releases · JackCh3n/portTest
v2026_0929
Full Changelog: v2026_0906...v2026_0929
v2026_0906
Full Changelog: v2026_0825...v2026_0906
v2026_0825
Full Changelog: v2026_0820...v2026_0825
Full Changelog: v2026_0820...v2026_0825
Full Changelog: v2026_0820...v2026_0825
Full Changelog: v2026_0820...v2026_0825
Full Changelog: v2026_0820...v2026_0825
v2026_0820
修复 traceroute TCP 竞态: connect 错误后仍等 ICMP + Windows 拒绝识别 问题现象(Linux 实测): - TCP traceroute 10.192.15.7 -T -p 8085: 第1跳 * 超时, 第2跳直达目标 - 中间路由器明明返回了 Time Exceeded, 却显示无响应 根因: 1. 核心竞态: Linux 内核收到 ICMP Time Exceeded 后, 除了投递给 raw socket, 还会把 EHOSTUNREACH 注入进行中的 connect()。原代码收到该错误立即返回 '无法确认', 导致中间跳的 ICMP 响应被竞态丢弃 2. isConnectionRefused 在 Windows 上失效: Go syscall 包把该常量定义为 POSIX 别名(数值≠10061), errors.Is 永远 false, 导致本机 RST 场景 (端口关闭)也显示超时而非'到达目标'。已用 errors.As 提取 Errno 数值按平台匹配(WSAECONNREFUSED=10061) 修复: 1. sendTcpProbe: 非确定性 TCP 错误(EHOSTUNREACH/ETIMEDOUT)后不立即返回, 继续等待 raw socket 的 ICMP Time Exceeded 直到 deadline; 仅 err==nil(连接成功)或 RST(连接拒绝)才直接判定到达目标 2. isConnectionRefused: 增加 Windows Errno(10061) 数值匹配 3. parseIcmpType 升级为 parseIcmpTypeCode: 同时提取 type/code, type=3 仅 code=3(端口不可达)判定到达目标, 其他 code(网络/主机不可达) 视为中间跳, 避免把'不可达'误报为'到达' 4. 新增 parseIcmpTriggerPort: 提取 ICMP 触发包目的端口, 校验属于当前探测, 防止无关/陈旧 ICMP 干扰路由显示 5. 测试: TestParseIcmpType 适配新签名(含 code), 新增 TestParseIcmpTriggerPort(覆盖 Linux/Windows 两种格式) 冒烟验证(本机): - TCP traceroute 关闭端口: 第1跳 [1ms] 到达目标(RST 识别) - TCP traceroute 开放端口: 第1跳 [1ms] 到达目标(连接成功) - 四平台交叉编译通过, dist 已重建, 待用户真实内网验证中间跳
v2026_0808
功能完善: 端口范围校验, 扫描并发限制, 退出码语义化, HTTPS支持, JSON输出 1. 修复端口范围上界校验 bug (spear.go parsePortRange) - 之前 12345-70000 会产生非法端口 70000, 现完整校验 1-65535 - 与单端口 parsePorts 行为保持一致 2. 全端口扫描并发限制 (spear.go scanTarget/QuickPing) - 信号量限制最多 1024 并发, 防止 65535 个 goroutine 耗尽文件描述符 3. 退出码语义化 (所有模式) - 0=成功 1=参数错误 2=连接失败 3=内部错误 - 25 处 os.Exit(1) 按语义分类替换 4. port 模式 HTTPS/TLS 支持 - 新增 -tls-cert/-tls-key 参数, 校验同时指定且文件存在 - 协议显示 http/https, 输出 https://localhost:port - 实测: 自签名证书 + curl -k 验证通过 5. tcping/scan 模式 JSON 输出 - 新增 -json-out 参数, 输出机器可读 JSON (MarshalIndent) - 支持脚本解析 (ScanResult 原有 json tag) 6. 新增 3 个测试: 端口范围边界/单端口边界校验 7. 版本号升至 1.1.0 8. README/帮助文档同步新参数与退出码说明
v2026_0807_1315
修复 CI 交叉编译失败: traceroute 使用 syscall.Handle(仅Windows可用) 导致非Windows平台无法…
v2026_0807
全面代码审计修复: build标签改年月日, IPv6解析, TCP traceroute, 安全加固 1. build.yml: Release 标签从 v年_月日_时分 改为 v年_月日 2. udp.go: 修复 IPv6 解析 bug (::1 被错误解析为 host=:: port=1) 改用 parseHostSegment 统一解析, 正确处理 [::1]:53 和 ::1 53 3. traceroute.go: 实现真正的 TCP traceroute - 新增 sendTcpProbe: 通过 Dialer.Control 在 TCP SYN 发出前设置 TTL - 新增 sockopt_unix.go/sockopt_windows.go 跨平台 setSocketTTL - TCP 模式: SYN 到达目标返回 SYN-ACK/RST, 中间路由器返回 ICMP Time Exceeded - 删除未使用的 tcpProbe 死代码 - 移除 math/rand 依赖, 修复 probePort 随机化逻辑 4. main.go: 安全加固与完善 - 静态目录校验移至 runPortMode, 避免多端口重复打印 - handleEcho 请求体限制 1MB, 防止内存耗尽 - extractTrailingFlags 新增 -version/-html/-json/-dir flag 回收 - 版本检查移至 extractTrailingFlags 之后 5. bench.go: 修复 QPS 除零风险 (elapsed=0 时返回 0.0) 6. curl.go: 响应体限制 10MB, 防止超大响应耗尽内存 7. 新增 6 个测试用例: IPv6解析/连接拒绝判断/version后置flag/html-dir后置flag/UDP IPv6/QPS除零
v2026_0805_0955
合并来自 auto/fix-build-sh-perm-23c1 的合并请求 #5 fix: 为 build.sh 添加可执行权限,修复 CI 构建失败 PR-URL: #5
v2026_0804_1703
构建产物文件名去掉时间戳, Release 标签保留 v年_月日_时分 格式
v2026_0804_1700
修复 Release 创建失败(403): 显式声明 contents 写权限并升级 action-gh-release 至 v2