问题模块
服务识别 (Service Detection)
严重程度
功能异常 (Malfunction)
问题描述
EnhancedPortScan (port_scan.go:231)
→ scanSinglePort (port_scan.go:553)
→ SmartIdentify (service_probe.go:138)
→ tryInitialBanner (service_probe.go:171)
→ tryProbes (service_probe.go:385)
→ GetInfo (service_probe.go:410) ← 💥 panic 发生在这里
崩溃发生在 service_probe.go:410 的 GetInfo 方法中。结合上下文:
1.GetInfo 在解析 banner/探测响应时,访问了一个为 nil 的对象。 最可能的情况:
连接建立成功但读取 banner 返回了空数据(nil byte slice),后续的正则匹配或字符串操作直接对 nil 解引用
某个正则编译结果为 nil(编译失败未检查),调用 .Match() 或 .FindSubmatch() 时崩溃
Info 结构体内部某个字段(如 conn、reader)未初始化就被使用
2.两次 panic 发生在同一行(410 行),但针对不同目标/端口,说明是代码逻辑缺陷,而非偶发网络问题。属于系统性 bug。
3.ants 捕获了 panic 并打印了日志,但工作线程已退出,这两个任务实际未完成。
复现步骤
# 扫描结果中其他信息正常输出,已省略已脱敏
./fscan -h xxx.xxx.xxx.xxx
错误输出
ference
goroutine 77 [running]:
runtime/debug.Stack()
C:/Program Files/Go/src/runtime/debug/stack.go:26 +0x5e
github.com/panjf2000/ants/v2.(*goWorkerWithFunc).run.func1.1()
C:/Users/xxxx/go/pkg/mod/github.com/panjf2000/ants/v2@v2.11.3/worker_func.go:62 +0xd4
panic({0xdf6bc0?, 0x1e2bca0?})
C:/Program Files/Go/src/runtime/panic.go:860 +0x13a
github.com/shadow1ng/fscan/core.(*Info).GetInfo(0x1b9293aa4fc0, {0x1b9293ca8000, 0x4d, 0x1000}, 0x0)
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/service_probe.go:410 +0xea
github.com/shadow1ng/fscan/core.(*Info).tryProbes(...)
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/service_probe.go:385
github.com/shadow1ng/fscan/core.(*SmartPortInfoScanner).tryInitialBanner(0x1b9293e51e08)
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/service_probe.go:171 +0xc5
github.com/shadow1ng/fscan/core.(*SmartPortInfoScanner).SmartIdentify(0x1b9293e51e08)
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/service_probe.go:138 +0x27
github.com/shadow1ng/fscan/core.scanSinglePort({0x1497738, 0x1b9293d8c000}, {0x7ffc7c720850, 0xc}, 0xcea, {0x1b9293a46078, 0x11}, 0x1b9293c705a0, 0x1b9293cf0c40, 0x1b92938e4fc8, ...)
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/port_scan.go:553 +0x5e5
github.com/shadow1ng/fscan/core.EnhancedPortScan.func1({0xe6fa60?, 0x1b9293af5140?})
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/port_scan.go:231 +0x153
github.com/panjf2000/ants/v2.(*goWorkerWithFunc).run.func1()
C:/Users/xxxx/go/pkg/mod/github.com/panjf2000/ants/v2@v2.11.3/worker_func.go:73 +0x97
created by github.com/panjf2000/ants/v2.(*goWorkerWithFunc).run in goroutine 68
C:/Users/xxxx/go/pkg/mod/github.com/panjf2000/ants/v2@v2.11.3/worker_func.go:50 +0x65
2026/06/24 17:05:05.731490 [ants]: worker exits from panic: runtime error: invalid memory address or nil pointer dereference
goroutine 74 [running]:
runtime/debug.Stack()
C:/Program Files/Go/src/runtime/debug/stack.go:26 +0x5e
github.com/panjf2000/ants/v2.(*goWorkerWithFunc).run.func1.1()
C:/Users/xxxx/go/pkg/mod/github.com/panjf2000/ants/v2@v2.11.3/worker_func.go:62 +0xd4
panic({0xdf6bc0?, 0x1e2bca0?})
C:/Program Files/Go/src/runtime/panic.go:860 +0x13a
github.com/shadow1ng/fscan/core.(*Info).GetInfo(0x1b9293aa4e40, {0x1b9293ca2000, 0x15, 0x1000}, 0x0)
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/service_probe.go:410 +0xea
github.com/shadow1ng/fscan/core.(*Info).tryProbes(...)
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/service_probe.go:385
github.com/shadow1ng/fscan/core.(*SmartPortInfoScanner).tryInitialBanner(0x1b9293d4fe08)
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/service_probe.go:171 +0xc5
github.com/shadow1ng/fscan/core.(*SmartPortInfoScanner).SmartIdentify(0x1b9293d4fe08)
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/service_probe.go:138 +0x27
github.com/shadow1ng/fscan/core.scanSinglePort({0x1497738, 0x1b9293d8c000}, {0x7ffc7c720850, 0xc}, 0x16, {0x1b92938e5080, 0xf}, 0x1b9293c705a0, 0x1b9293cf0c40, 0x1b92938e4fc8, ...)
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/port_scan.go:553 +0x5e5
github.com/shadow1ng/fscan/core.EnhancedPortScan.func1({0xe6fa60?, 0x1b9293af5020?})
C:/Users/xxxx/Downloads/fscan-dev(1)/fscan-dev/core/port_scan.go:231 +0x153
github.com/panjf2000/ants/v2.(*goWorkerWithFunc).run.func1()
C:/Users/xxxx/go/pkg/mod/github.com/panjf2000/ants/v2@v2.11.3/worker_func.go:73 +0x97
created by github.com/panjf2000/ants/v2.(*goWorkerWithFunc).run in goroutine 68
C:/Users/xxxx/go/pkg/mod/github.com/panjf2000/ants/v2@v2.11.3/worker_func.go:50 +0x65
[-] 插件扫描错误 172.172.172.172:3389 - context deadline exceeded
[*] 扫描任务完成,耗时 3m1.183s,已扫描 18 个目标
[-] 错误: context deadline exceeded
fscan 版本
2.2.0-rc (dev)
操作系统
CentOS 7/8/Stream
系统架构
amd64 (x86_64)
补充信息
No response
问题模块
服务识别 (Service Detection)
严重程度
功能异常 (Malfunction)
问题描述
EnhancedPortScan (port_scan.go:231)
→ scanSinglePort (port_scan.go:553)
→ SmartIdentify (service_probe.go:138)
→ tryInitialBanner (service_probe.go:171)
→ tryProbes (service_probe.go:385)
→ GetInfo (service_probe.go:410) ← 💥 panic 发生在这里
崩溃发生在 service_probe.go:410 的 GetInfo 方法中。结合上下文:
1.GetInfo 在解析 banner/探测响应时,访问了一个为 nil 的对象。 最可能的情况:
连接建立成功但读取 banner 返回了空数据(nil byte slice),后续的正则匹配或字符串操作直接对 nil 解引用
某个正则编译结果为 nil(编译失败未检查),调用 .Match() 或 .FindSubmatch() 时崩溃
Info 结构体内部某个字段(如 conn、reader)未初始化就被使用
2.两次 panic 发生在同一行(410 行),但针对不同目标/端口,说明是代码逻辑缺陷,而非偶发网络问题。属于系统性 bug。
3.ants 捕获了 panic 并打印了日志,但工作线程已退出,这两个任务实际未完成。
复现步骤
# 扫描结果中其他信息正常输出,已省略已脱敏 ./fscan -h xxx.xxx.xxx.xxx错误输出
fscan 版本
2.2.0-rc (dev)
操作系统
CentOS 7/8/Stream
系统架构
amd64 (x86_64)
补充信息
No response