feat: v2.1.0 核心重构与功能增强

## 架构重构
- 全局变量消除,迁移至 Config/State 对象
- SMB 插件融合(smb/smb2/smbghost/smbinfo)
- 服务探测重构,实现 Nmap 风格 fallback 机制
- 输出系统重构,TXT 实时刷盘 + 双写机制
- i18n 框架升级至 go-i18n

## 性能优化
- 正则表达式预编译
- 内存优化 map[string]struct{}
- 并发指纹匹配
- SOCKS5 连接复用
- 滑动窗口调度 + 自适应线程池

## 新功能
- Web 管理界面
- 多格式 POC 适配(xray/afrog)
- 增强指纹库(3139条)
- Favicon hash 指纹识别
- 插件选择性编译(Build Tags)
- fscan-lab 靶场环境
- 默认端口扩展(62→133)

## 构建系统
- 添加 no_local tag 支持排除本地插件
- 多版本构建:fscan/fscan-nolocal/fscan-web
- CI 添加 snapshot 模式支持仅测试构建

## Bug 修复
- 修复 120+ 个问题,包括 RDP panic、批量扫描漏报、
  JSON 输出格式、Redis 检测、Context 超时等

## 测试增强
- 单元测试覆盖率 74-100%
- 并发安全测试
- 集成测试(Web/端口/服务/SSH/ICMP)
This commit is contained in:
ZacharyZcR
2026-01-11 20:16:23 +08:00
parent 6b13b2e84f
commit 71b92d4408
948 changed files with 92335 additions and 24630 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

@@ -0,0 +1,22 @@
BenchmarkCheckSum-24 659448997 1.821 ns/op 0 B/op 0 allocs/op
BenchmarkArrayCountValueTop-24 4047 257006 ns/op 329822 B/op 5040 allocs/op
BenchmarkTCPDial-24 4596 473517 ns/op 2424 B/op 27 allocs/op
BenchmarkResultCollectorAdd-24 31689693 42.06 ns/op 99 B/op 0 allocs/op
BenchmarkResultCollectorAddParallel-24 16319025 73.03 ns/op 99 B/op 0 allocs/op
BenchmarkResultCollectorGetAll-24 501963 2320 ns/op 16384 B/op 1 allocs/op
BenchmarkFailedPortCollectorAdd-24 18020209 72.26 ns/op 218 B/op 0 allocs/op
BenchmarkEstimateScanTime-24 1000000000 0.1474 ns/op 0 B/op 0 allocs/op
BenchmarkCalculateTotalTasks-24 345832 3346 ns/op 0 B/op 0 allocs/op
BenchmarkBuildExcludeMap-24 8549785 143.4 ns/op 328 B/op 3 allocs/op
ok github.com/shadow1ng/fscan/core 14.384s
BenchmarkDecodePattern-24 23028650 44.72 ns/op 56 B/op 3 allocs/op
BenchmarkDecodePattern_Complex-24 8355910 144.3 ns/op 40 B/op 13 allocs/op
ok github.com/shadow1ng/fscan/core/portfinger 3.008s
BenchmarkParseIPCIDR24-24 40768 29300 ns/op 57881 B/op 294 allocs/op
BenchmarkParseIPCIDR16-24 829 1394559 ns/op 2692984 B/op 10122 allocs/op
BenchmarkParseIPRange-24 42494 28765 ns/op 57816 B/op 289 allocs/op
BenchmarkParseIPSingle-24 15086103 76.51 ns/op 64 B/op 4 allocs/op
BenchmarkParsePortRange-24 303 4050534 ns/op 10277983 B/op 585 allocs/op
BenchmarkParsePortList-24 1667944 700.6 ns/op 968 B/op 14 allocs/op
BenchmarkParsePortCommon-24 1007536 1237 ns/op 1672 B/op 16 allocs/op
ok github.com/shadow1ng/fscan/common/parsers 11.298s
Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

@@ -0,0 +1,11 @@
"threads","duration_sec","ports_per_sec","total_ports"
"200","30.221","42","1270"
"400","19.124","66.4","1270"
"600","16.162","78.6","1270"
"800","14.099","90.1","1270"
"1000","12.127","104.7","1270"
"1500","12.102","104.9","1270"
"2000","12.114","104.8","1270"
"3000","12.122","104.8","1270"
"4000","12.074","105.2","1270"
"5000","12.116","104.8","1270"
1 threads duration_sec ports_per_sec total_ports
2 200 30.221 42 1270
3 400 19.124 66.4 1270
4 600 16.162 78.6 1270
5 800 14.099 90.1 1270
6 1000 12.127 104.7 1270
7 1500 12.102 104.9 1270
8 2000 12.114 104.8 1270
9 3000 12.122 104.8 1270
10 4000 12.074 105.2 1270
11 5000 12.116 104.8 1270
Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

@@ -0,0 +1,8 @@
"threads","duration_ms","packets_per_sec","total_packets","tcp_success","tcp_failed","success_rate"
200,29330,43.3,1270,759,511,59.8
400,18730,67.8,1270,759,511,59.8
600,15270,83.2,1270,759,511,59.8
800,13090,97.2,1270,759,511,59.8
1000,11660,109.0,1270,759,511,59.8
1500,11500,110.9,1270,759,511,59.8
2000,11900,106.8,1270,759,511,59.8
1 threads duration_ms packets_per_sec total_packets tcp_success tcp_failed success_rate
2 200 29330 43.3 1270 759 511 59.8
3 400 18730 67.8 1270 759 511 59.8
4 600 15270 83.2 1270 759 511 59.8
5 800 13090 97.2 1270 759 511 59.8
6 1000 11660 109.0 1270 759 511 59.8
7 1500 11500 110.9 1270 759 511 59.8
8 2000 11900 106.8 1270 759 511 59.8
Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

@@ -0,0 +1,6 @@
"module_threads","duration_ms","packets_per_sec","tcp_success","tcp_failed","success_rate"
"5","15211","83.49","759","511","59.76"
"10","15253","83.26","759","511","59.76"
"20","15221","83.44","759","511","59.76"
"50","15254","83.26","759","511","59.76"
"100","15217","83.46","759","511","59.76"
1 module_threads duration_ms packets_per_sec tcp_success tcp_failed success_rate
2 5 15211 83.49 759 511 59.76
3 10 15253 83.26 759 511 59.76
4 20 15221 83.44 759 511 59.76
5 50 15254 83.26 759 511 59.76
6 100 15217 83.46 759 511 59.76
Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

@@ -0,0 +1,5 @@
"time_seconds","duration_ms","packets_per_sec","tcp_success","tcp_failed","success_rate"
"1","13110","96.87","759","511","59.76"
"2","13295","95.52","759","511","59.76"
"3","15231","83.38","759","511","59.76"
"5","16451","77.20","759","511","59.76"
1 time_seconds duration_ms packets_per_sec tcp_success tcp_failed success_rate
2 1 13110 96.87 759 511 59.76
3 2 13295 95.52 759 511 59.76
4 3 15231 83.38 759 511 59.76
5 5 16451 77.20 759 511 59.76