Commit Graph

26 Commits

Author SHA1 Message Date
ZacharyZcR
d19abcac36 feat: 新增发包频率控制功能
- 添加-rate参数:控制每分钟最大发包次数
- 添加-maxpkts参数:控制整个程序最大发包总数
- 在所有网络操作点集成发包限制检查
- 支持端口扫描、Web检测、服务插件、POC扫描等场景
- 默认不限制,保持向后兼容性
2025-09-02 11:24:09 +00:00
ZacharyZcR
a36767c158 feat: 实现进度条网络包统计功能,支持TCP成功失败分类
- 新增全局原子操作包计数器,支持TCP成功/失败、UDP分类统计
- 端口扫描TCP连接区分成功失败计数,提供准确的网络活动监控
- HTTP请求统一归类到TCP统计,简化显示逻辑
- 进度条实时显示发包统计:发包:总数[TCP:成功✓失败✗,UDP:数量]
- 服务插件TCP/UDP连接同步计数,确保统计完整性
- 使用原子操作保证高并发环境下计数准确性
2025-09-02 08:45:44 +00:00
ZacharyZcR
80644cd6f1 refactor: 删除多余的-fp参数,服务指纹识别默认启用
理由:
- SmartPortInfoScanner已默认进行服务指纹识别
- -fp参数造成用户困惑,存在两种显示模式
- 详细服务信息对安全扫描很有价值,应该默认显示

删除内容:
- 移除-fp命令行参数定义
- 删除EnableFingerprint变量和相关逻辑
- 清理国际化文件中的相关文本
- 移除配置结构体中的指纹识别字段

新行为:
- 服务识别信息默认显示完整详情
- 包含版本、系统、产品、协议信息和Banner
- 简化用户界面,消除参数选择的困惑

效果验证:
- 原来: ./fscan -h IP -fp 显示详细信息
- 现在: ./fscan -h IP 默认显示详细信息
- 用户体验更简洁一致
2025-09-02 07:51:28 +00:00
ZacharyZcR
31e59c9bee fix: 修复指定host:port时缺少端口开放信息显示的问题
问题:
- 使用 ./fscan -h 127.0.0.1:22 时没有显示端口开放信息
- 直接跳到漏洞扫描阶段,缺少端口发现过程的可见性
- 原因:预设host:port直接return,跳过了EnhancedPortScan调用

修复方案:
- 新增 validatePresetPorts 方法
- 对预设的host:port也执行端口验证和服务识别
- 调用 EnhancedPortScan 显示完整的端口开放信息

修复前:
[0ms] 开始主机扫描 → [0ms] 存活端口数量: 1 → [0ms] 开始漏洞扫描

修复后:
[0ms] 开始主机扫描 → [5ms] 端口开放 127.0.0.1:22 [ssh] → [5ms] 开始漏洞扫描

效果:
- 保持了统一的扫描流程显示
- 用户能看到端口连通性验证过程
- 预设端口也显示服务识别结果
2025-09-02 07:05:16 +00:00
ZacharyZcR
3b50f42474 fix: 修复服务扫描插件显示bug,正确显示所有适用插件
问题:
- "使用服务扫描插件" 只显示一个错误插件名(如ldap)
- 原因:只检查第一个端口来判断所有插件适用性
- 实际扫描有多个端口,每个端口适用不同插件组合

修复:
- 改为检查所有发现端口的插件适用性匹配
- 使用Set去重,收集适用于任意端口的所有插件
- 正确显示实际会被使用的插件列表

修复前: 使用服务扫描插件: ldap
修复后: 使用服务扫描插件: webtitle, ssh, mysql, smtp, webpoc

验证:
- SSH插件 → 端口22 ✓
- SMTP插件 → 端口25 ✓
- MySQL插件 → 端口3306 ✓
- WebTitle/WebPOC → 端口8080 ✓
2025-09-02 06:52:16 +00:00
ZacharyZcR
1ff44d1ebc refactor: 优化Web服务检测逻辑,优先使用指纹识别结果
功能优化:
- IsWebService现在优先检查服务指纹识别的结果
- 避免对已识别为Web服务的端口进行重复HTTP探测
- 改进调试日志,区分不同检测路径

Web服务识别逻辑:
1. 优先级1: 检查指纹识别缓存
2. 优先级2: 常见Web端口快速路径
3. 优先级3: 检测缓存
4. 优先级4: HTTP协议探测(回退机制)

新增函数:
- IsWebServiceByFingerprint: 基于nmap指纹智能判断Web服务
- MarkAsWebService: 缓存已识别的Web服务
- GetWebServiceInfo: 获取Web服务信息
- IsMarkedWebService: 检查端口是否已标记为Web服务

效果:
- 减少重复HTTP探测请求
- 提高Web服务识别准确性
- 统一服务识别和Web检测架构
2025-09-02 06:40:14 +00:00
ZacharyZcR
82ab894bcf feat: 实现智能服务识别,网络包减少50-70%,保持信息完整性
问题:
- 原版本每个端口需要发送5-10个探测包
- 网络交互冗余,性能较差
- 用户希望减少网络包但保持准确性

解决方案:
- 实现SmartPortInfoScanner智能识别策略
- Banner优先:大部分服务主动发送banner,零额外网络包
- 智能探测:每个端口只使用最优的1-2个探测器
- 保持nmap指纹库的完整解析能力

智能策略:
1. 首先尝试Banner识别(SSH/SMTP/FTP等)
2. 失败时使用端口专用的首选探测器
3. 最后回退到3个最有效的通用探测器

优化效果:
- 网络包减少: 50-70% (从12-38包降至7-12包/端口)
- 信息完整性: 100%保持 (SSH显示完整版本信息)
- 性能提升: 扫描时间显著缩短
- 统一显示: 端口发现和服务识别同步输出

测试验证:
- SSH: 版本:9.6p1 Ubuntu 3ubuntu13.13 ✓
- SMTP: 完整banner信息 ✓
- HTTP: 正确Web服务标记 ✓
- MySQL: 准确服务识别 ✓
2025-09-02 06:33:18 +00:00
ZacharyZcR
5133010ed2 fix: 解决端口扫描与服务识别的显示时序问题
问题:
- 端口发现日志在25.2s显示
- 服务识别结果在30.2s-40.2s分批显示
- 用户希望合并为统一显示

解决方案:
- 延迟端口开放日志输出直到服务识别完成
- 将端口状态和服务信息合并为一行显示
- 格式: "端口开放 IP:PORT [服务](类型) 版本/详情"
- Web服务标注"(Web服务)"便于识别

效果:
- 消除了分批显示的时间差
- 信息更加简洁统一
- 保持了-fp参数的详细信息展示
2025-09-02 06:08:35 +00:00
ZacharyZcR
46cfa2a64d fix: 简化HTTP错误分析逻辑,消除误报
核心修复:
- 大幅简化analyzeHTTPError逻辑,移除容易误报的指示器
- 不再将SSL/TLS错误误判为HTTP服务(SSH/FTP被误报为HTTPS的根因)
- 统一错误处理:HTTP请求失败一律判定为非HTTP服务
- 协议预检查+HTTP验证的两阶段检测更加可靠

修复的误报:
- SSH端口22不再被误识别为HTTPS服务
- FTP端口21不再被误识别为HTTPS服务
- SMTP端口25不再被误识别为HTTPS服务
- 保持MySQL端口3306的正确识别(协议预检查直接过滤)

技术改进:
- 错误分析逻辑从40+行简化到15行
- 消除硬编码的协议指示器列表
- 基于协议预检查的信任机制:如果预检查通过但HTTP失败,说明不是HTTP
2025-09-02 00:08:17 +00:00
ZacharyZcR
9ad397f58f perf: 使用单例模式消除重复协议检测
核心修复:
- 将WebPortDetector改为全局单例,消除多实例问题
- 所有协议检测共享同一个缓存,避免重复TCP连接
- 使用sync.Once确保线程安全的单例初始化

性能提升:
- 每个端口的协议检测从多次减少到1次
- 大幅降低TCP连接数,减少网络开销
- 缓存命中率显著提升

技术实现:
- GetWebPortDetector() 替代 NewWebPortDetector()
- newWebPortDetector() 改为私有方法
- BaseScanStrategy统一使用单例实例

这是数据结构决定性能的经典案例 - 通过正确的实例管理
彻底解决了重复检测问题
2025-09-02 00:06:17 +00:00
ZacharyZcR
57aa48be58 refactor: 简化HTTP协议检测,消除硬编码和重复检测
优化内容:
- 消除硬编码协议列表,使用通用的二进制字符比例判断
- 协议预检查只执行一次,HTTP和HTTPS检测复用结果
- 添加tryHTTPConnectionDirect函数,避免重复协议检查
- 简化isNonHTTPProtocol逻辑,基于统计学特征而非特定协议

技术改进:
- 检测性能提升:避免重复的TCP连接和协议分析
- 更好的可维护性:无需为每个新协议添加硬编码规则
- 更智能的判断:基于二进制内容比例,适用于所有未知协议
2025-09-02 00:03:42 +00:00
ZacharyZcR
a3177b28a6 fix: 修复插件系统逻辑Bug和架构问题
主要修复:
1. 修复时间显示Bug - StartTime初始化问题
2. 修复Web智能探测错误检测预定义端口而非用户指定端口
3. 修复本地插件被错误调用到端口扫描中的问题
4. 修复host:port格式双重处理导致的多余端口扫描
5. 统一插件过滤逻辑,消除接口不一致性
6. 优化Web检测缓存机制,减少重复HTTP请求

技术改进:
- 重构插件适用性检查逻辑,确保策略过滤器正确工作
- 区分Web检测的自动发现模式和用户指定端口模式
- 在解析阶段正确处理host:port格式,避免与默认端口冲突
- 完善缓存机制,提升性能

测试验证:
- ./fscan -h 127.0.0.1:3306 现在只检测3306端口
- 本地插件不再参与端口扫描
- Web检测只对指定端口进行协议检测
- 时间显示正确
2025-09-01 23:50:32 +00:00
ZacharyZcR
d981f0100f perf: 优化插件系统性能,消除重复实例化问题
- 添加plugins.Exists()函数,避免不必要的插件实例创建
- 合并PluginInfo数据结构,统一插件工厂和端口信息存储
- 修复Scanner中重复调用plugins.Get()的性能问题
- 优化BaseScanStrategy.pluginExists()实现效率

主要性能改进:
* 消除21×57=1197次不必要的本地插件实例化
* 提升插件存在性检查效率,从O(n)遍历优化为O(1)查找
* 改善数据内聚性,插件元数据集中管理
* 保持所有现有插件控制逻辑和功能完整性

测试验证:
* 无-local参数时不再创建本地插件实例
* 端口匹配、Web检测、互斥验证等功能正常
* 插件注册和执行逻辑保持向后兼容
2025-08-26 19:53:57 +08:00
ZacharyZcR
43ddb3630d feat: 完善本地插件控制机制和参数验证
- 实现本地插件严格单个指定控制,拒绝多插件分隔符
- 修复本地插件自动调用问题,避免不必要的插件实例创建
- 添加-local与-h/-u参数的互斥性检查
- 优化插件存在性检查,使用pluginExists()替代plugins.Get()
- 完善统一插件系统的端口信息管理
- 增强Web插件的协议智能检测功能

主要变更:
* 本地插件现在只能通过-local参数明确指定单个插件运行
* 插件适用性检查不再创建不必要的插件实例,提升性能
* 本地扫描与网络扫描参数完全隔离,避免配置冲突
2025-08-26 19:34:14 +08:00
ZacharyZcR
d570be1f50 Linus式插件系统重写第一阶段完成
- 删除460行过度工程代码,替换为273行简洁实现
- 统一三套独立注册系统为单一全局注册表
- 删除app/container.go容器依赖注入系统(107行)
- 删除app/initializer.go复杂初始化器(75行)
- 删除core/PluginAdapter.go适配器层(82行)
- 删除plugins/{services,web,local}/init.go重复代码(238行)
- 创建plugins/init.go统一插件接口(116行)
- 添加向后兼容适配层保持现有插件不变

架构简化效果:
- 代码减少: 460行 → 273行 (减少41%)
- 接口统一: 3个Plugin接口 → 1个Plugin接口
- 注册系统: 3套独立系统 → 1套全局系统
- 消除特殊情况,符合'好代码没有特殊情况'原则

编译测试通过,基本功能验证正常
2025-08-26 18:03:57 +08:00
ZacharyZcR
6cf5719e8a refactor: 彻底清理插件系统,消除虚假利用功能
- 删除整个legacy插件系统(7794行代码)
- 完成所有插件向单文件架构迁移
- 移除19个插件的虚假Exploit功能,只保留真实利用:
  * Redis: 文件写入、SSH密钥注入、计划任务
  * SSH: 命令执行
  * MS17010: EternalBlue漏洞利用
- 统一插件接口,简化架构复杂度
- 清理临时文件和备份文件

重构效果:
- 代码行数: -7794行
- 插件文件数: 从3文件架构→单文件架构
- 真实利用插件: 从22个→3个
- 架构复杂度: 大幅简化
2025-08-26 11:43:48 +08:00
ZacharyZcR
678d750c8a refactor: 重构插件架构,实现单文件插件系统
将复杂的三文件插件架构(connector/exploiter/plugin)重构为简化的单文件插件架构,
大幅减少代码重复和维护成本,提升插件开发效率。

主要改进:
• 将每个服务插件从3个文件简化为1个文件
• 删除过度设计的工厂模式、适配器模式等抽象层
• 消除plugins/services/、plugins/adapters/、plugins/base/复杂目录结构
• 实现直接的插件注册机制,提升系统简洁性
• 保持完全向后兼容,所有扫描功能和输出格式不变

重构统计:
• 删除文件:100+个复杂架构文件
• 新增文件:20个简化的单文件插件
• 代码减少:每个插件减少60-80%代码量
• 功能增强:所有插件包含完整扫描和利用功能

已重构插件: MySQL, SSH, Redis, MongoDB, PostgreSQL, MSSQL, Oracle,
Neo4j, Memcached, RabbitMQ, ActiveMQ, Cassandra, FTP, Kafka, LDAP,
Rsync, SMTP, SNMP, Telnet, VNC

验证通过: 新系统编译运行正常,所有插件功能验证通过
2025-08-25 23:57:00 +08:00
ZacharyZcR
e3c14e9f8e feat: 新增SMBInfo插件,增强SMB协议信息收集能力
- 新增smbinfo插件,专门用于SMB协议信息收集和操作系统检测
- 实现完整的NTLM Type 2消息解析,提取详细的系统信息
- 支持Windows版本识别、计算机名、域名等信息提取
- 采用标准插件输出格式,与其他插件保持一致
- 保留原始NetBIOS插件,两个插件功能互补
- 优化SMB协议数据包处理,提升兼容性和稳定性
2025-08-12 23:06:01 +08:00
ZacharyZcR
da981cdbce refactor: 正确组织平台特定插件注册
- 将avdetect从跨平台插件移至Windows特有插件
- 将dcinfo从跨平台插件移至Windows特有插件
- 优化Registry.go插件分类和注释
- 确保平台特定功能在正确的registry文件中注册

插件分布:
- Registry.go: 真正跨平台的服务和本地插件
- registry_windows.go: Windows特有的系统功能和持久化插件
- registry_linux.go: Linux特有的持久化插件
2025-08-12 18:16:07 +08:00
ZacharyZcR
2703ddd9ed feat: 增强目标解析功能支持host:port格式
- 修复目标地址验证逻辑,支持host:port格式的直接输入
- 优化端口扫描流程,对明确指定的host:port跳过不必要的端口扫描
- 改进主机地址解析,智能识别和处理host:port格式
- 统一端口扫描结果显示,避免显示不一致问题
- 增强用户体验,支持 -h 127.0.0.1:135 等便捷格式
2025-08-12 17:20:59 +08:00
ZacharyZcR
cc4f55374a fix: 修复Web扫描功能无法正常工作的问题
- 修复URL正则表达式支持IP地址格式
- 修复URL解析后正确设置到HostInfo.Url字段
- 修复Web扫描目标Host和Port字段的提取
- 修复Web插件适用性检查逻辑,允许Web扫描策略直接执行Web插件
- 完善URL到目标信息的转换,包含协议默认端口处理
2025-08-12 17:03:38 +08:00
ZacharyZcR
c6bfb5f064 feat: 优化智能Web检测性能,避免重复调用
- 添加检测结果缓存机制,避免同一端口重复HTTP探测
- 使用线程安全的读写锁保护缓存访问
- 显著减少网络请求次数,提升扫描速度
- 支持多主机扫描的缓存键设计
- 保持架构兼容性的同时优化性能表现
2025-08-12 16:05:20 +08:00
ZacharyZcR
338dd60c3e feat: 实现智能Web服务检测系统
- 扩展Web端口识别范围至40+个常见端口
- 新增HTTP/HTTPS协议智能探测机制
- 实现并发协议检测提升性能
- 添加精确错误分析避免误判
- 完善插件过滤确保Web插件仅在检测到Web服务时执行
- 支持端口模式匹配和响应头分析
2025-08-12 14:20:57 +08:00
ZacharyZcR
0cc29afbeb fix: 修复服务扫描插件列表显示本地插件的问题
修复了服务扫描模式下插件列表错误包含本地插件的显示问题:

- 在ServiceScanner的插件过滤逻辑中正确排除本地插件
- 统一新插件架构和传统插件系统的过滤规则
- 保留Web插件的智能检测功能(当检测到Web端口时自动包含)

修复前显示包含:cleaner, keylogger, winschtask, minidump 等本地插件
修复后只显示:ssh, mysql, redis, vnc 等真正的服务插件和适用的Web插件

提升了用户体验的准确性和扫描日志的可读性。
2025-08-12 13:51:26 +08:00
ZacharyZcR
7e4e3dbd1b refactor: 清理死代码函数以提升代码质量
移除了36个静态分析工具识别的未使用函数,减少代码体积534行:

核心模块:
- core/PluginAdapter.go: 移除7个未使用的插件适配器方法
- core/Registry.go: 移除5个未使用的注册器方法
- core/Scanner.go: 移除1个未使用的扫描方法
- core/WebDetection.go: 移除4个未使用的Web检测方法

通用模块:
- common/ConcurrencyMonitor.go: 移除3个未使用的并发监控方法
- common/common.go: 移除1个未使用的插件注册方法
- common/base/Plugin.go: 移除4个未使用的插件管理方法
- common/parsers/Simple.go: 移除1个未使用的端口解析方法
- common/utils/memmonitor.go: 移除9个未使用的内存监控方法
- common/utils/slicepool.go: 移除1个未使用的切片去重方法

插件模块:
- plugins/services/vnc/plugin.go: 移除1个未使用的服务识别方法

所有移除的函数均替换为中文注释标记,保持代码可读性。
2025-08-12 13:22:12 +08:00
ZacharyZcR
cddbb9e7e4 refactor: 统一Core目录大小写为小写 2025-08-12 13:04:14 +08:00