mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 03:10:42 +08:00
feat: 添加 -nsp 参数禁用网段预筛
大规模扫描时 probeSubnets 会自动跳过空 /24 网段, 部分场景下用户需要关闭此优化以扫描全部目标。 新增 -nsp (no subnet probe) 参数控制。
This commit is contained in:
@@ -32,6 +32,7 @@ type Config struct {
|
|||||||
DisableBrute bool // 禁用暴力破解
|
DisableBrute bool // 禁用暴力破解
|
||||||
DisablePing bool // 禁用Ping检测
|
DisablePing bool // 禁用Ping检测
|
||||||
DisableTcpProbe bool // 禁用TCP补充探测
|
DisableTcpProbe bool // 禁用TCP补充探测
|
||||||
|
DisableSubnetProbe bool // 禁用网段预筛
|
||||||
|
|
||||||
// 扫描模式
|
// 扫描模式
|
||||||
Mode string // 扫描模式
|
Mode string // 扫描模式
|
||||||
@@ -200,7 +201,8 @@ func NewConfig() *Config {
|
|||||||
ModuleThreadNum: 10,
|
ModuleThreadNum: 10,
|
||||||
DisableBrute: false,
|
DisableBrute: false,
|
||||||
DisablePing: false,
|
DisablePing: false,
|
||||||
DisableTcpProbe: false,
|
DisableTcpProbe: false,
|
||||||
|
DisableSubnetProbe: false,
|
||||||
|
|
||||||
// 扫描模式
|
// 扫描模式
|
||||||
Mode: DefaultScanMode,
|
Mode: DefaultScanMode,
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ func Flag(Info *HostInfo) error {
|
|||||||
flag.Int64Var(&fv.GlobalTimeout, "gt", 180, i18n.GetText("flag_global_timeout"))
|
flag.Int64Var(&fv.GlobalTimeout, "gt", 180, i18n.GetText("flag_global_timeout"))
|
||||||
flag.BoolVar(&fv.DisablePing, "np", false, i18n.GetText("flag_disable_ping"))
|
flag.BoolVar(&fv.DisablePing, "np", false, i18n.GetText("flag_disable_ping"))
|
||||||
flag.BoolVar(&fv.DisableTcpProbe, "ntp", false, i18n.GetText("flag_disable_tcp_probe"))
|
flag.BoolVar(&fv.DisableTcpProbe, "ntp", false, i18n.GetText("flag_disable_tcp_probe"))
|
||||||
|
flag.BoolVar(&fv.DisableSubnetProbe, "nsp", false, i18n.GetText("flag_disable_subnet_probe"))
|
||||||
flag.StringVar(&fv.LocalPlugin, "local", "", i18n.GetText("flag_local_plugin"))
|
flag.StringVar(&fv.LocalPlugin, "local", "", i18n.GetText("flag_local_plugin"))
|
||||||
flag.BoolVar(&fv.AliveOnly, "ao", false, i18n.GetText("flag_alive_only"))
|
flag.BoolVar(&fv.AliveOnly, "ao", false, i18n.GetText("flag_alive_only"))
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ type FlagVars struct {
|
|||||||
GlobalTimeout int64
|
GlobalTimeout int64
|
||||||
DisablePing bool
|
DisablePing bool
|
||||||
DisableTcpProbe bool
|
DisableTcpProbe bool
|
||||||
|
DisableSubnetProbe bool
|
||||||
LocalPlugin string
|
LocalPlugin string
|
||||||
AliveOnly bool
|
AliveOnly bool
|
||||||
DisableBrute bool
|
DisableBrute bool
|
||||||
@@ -150,6 +151,7 @@ func BuildConfigFromFlags(fv *FlagVars) *Config {
|
|||||||
DisableBrute: fv.DisableBrute,
|
DisableBrute: fv.DisableBrute,
|
||||||
DisablePing: fv.DisablePing,
|
DisablePing: fv.DisablePing,
|
||||||
DisableTcpProbe: fv.DisableTcpProbe,
|
DisableTcpProbe: fv.DisableTcpProbe,
|
||||||
|
DisableSubnetProbe: fv.DisableSubnetProbe,
|
||||||
|
|
||||||
// 扫描模式
|
// 扫描模式
|
||||||
Mode: fv.ScanMode,
|
Mode: fv.ScanMode,
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ flag_disable_ping:
|
|||||||
other: "Disable ping detection"
|
other: "Disable ping detection"
|
||||||
flag_disable_tcp_probe:
|
flag_disable_tcp_probe:
|
||||||
other: "Disable TCP supplementary probe"
|
other: "Disable TCP supplementary probe"
|
||||||
|
flag_disable_subnet_probe:
|
||||||
|
other: "Disable subnet pre-filter (optimization that skips empty /24 subnets in large scans)"
|
||||||
flag_local_plugin:
|
flag_local_plugin:
|
||||||
other: "Specify local plugin name (e.g.: cleaner, systeminfo, keylogger)"
|
other: "Specify local plugin name (e.g.: cleaner, systeminfo, keylogger)"
|
||||||
flag_debug:
|
flag_debug:
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ flag_disable_ping:
|
|||||||
other: "禁用ping探测"
|
other: "禁用ping探测"
|
||||||
flag_disable_tcp_probe:
|
flag_disable_tcp_probe:
|
||||||
other: "禁用TCP补充探测"
|
other: "禁用TCP补充探测"
|
||||||
|
flag_disable_subnet_probe:
|
||||||
|
other: "禁用网段预筛(大规模扫描时跳过空 /24 网段的优化)"
|
||||||
flag_local_plugin:
|
flag_local_plugin:
|
||||||
other: "指定本地插件名称 (如: cleaner, systeminfo, keylogger 等)"
|
other: "指定本地插件名称 (如: cleaner, systeminfo, keylogger 等)"
|
||||||
flag_debug:
|
flag_debug:
|
||||||
|
|||||||
+1
-1
@@ -147,7 +147,7 @@ func EnhancedPortScan(ctx context.Context, hosts []string, ports string, timeout
|
|||||||
session.LogDebug(i18n.Tr("port_scan_debug_start", len(hosts), config.ThreadNum))
|
session.LogDebug(i18n.Tr("port_scan_debug_start", len(hosts), config.ThreadNum))
|
||||||
|
|
||||||
// 大规模扫描预筛:跨多个 /24 时先做网段探活,跳过空网段
|
// 大规模扫描预筛:跨多个 /24 时先做网段探活,跳过空网段
|
||||||
if len(hosts) > subnetProbeThreshold {
|
if !config.DisableSubnetProbe && len(hosts) > subnetProbeThreshold {
|
||||||
hosts = probeSubnets(ctx, hosts, time.Duration(timeout)*time.Second, session)
|
hosts = probeSubnets(ctx, hosts, time.Duration(timeout)*time.Second, session)
|
||||||
if len(hosts) == 0 {
|
if len(hosts) == 0 {
|
||||||
session.LogInfo(i18n.GetText("port_scan_no_alive_subnet"))
|
session.LogInfo(i18n.GetText("port_scan_no_alive_subnet"))
|
||||||
|
|||||||
@@ -411,6 +411,7 @@ func buildFlagVars(config Config, target Target) *common.FlagVars {
|
|||||||
GlobalTimeout: 180,
|
GlobalTimeout: 180,
|
||||||
DisablePing: config.DisablePing,
|
DisablePing: config.DisablePing,
|
||||||
DisableTcpProbe: config.DisableTCPProbe,
|
DisableTcpProbe: config.DisableTCPProbe,
|
||||||
|
DisableSubnetProbe: config.DisableSubnetProbe,
|
||||||
AliveOnly: false,
|
AliveOnly: false,
|
||||||
DisableBrute: config.DisableBrute,
|
DisableBrute: config.DisableBrute,
|
||||||
MaxRetries: maxRetries,
|
MaxRetries: maxRetries,
|
||||||
|
|||||||
+4
-3
@@ -133,9 +133,10 @@ type Config struct {
|
|||||||
ModuleThreads int
|
ModuleThreads int
|
||||||
MaxRetries int
|
MaxRetries int
|
||||||
|
|
||||||
DisablePing bool
|
DisablePing bool
|
||||||
DisableTCPProbe bool
|
DisableTCPProbe bool
|
||||||
DisableBrute bool
|
DisableSubnetProbe bool
|
||||||
|
DisableBrute bool
|
||||||
|
|
||||||
Usernames []string
|
Usernames []string
|
||||||
Passwords []string
|
Passwords []string
|
||||||
|
|||||||
+4
-2
@@ -38,8 +38,9 @@ type ScanRequest struct {
|
|||||||
ThreadNum int `json:"thread_num"`
|
ThreadNum int `json:"thread_num"`
|
||||||
Timeout int `json:"timeout"`
|
Timeout int `json:"timeout"`
|
||||||
ModuleThreadNum int `json:"module_thread_num"`
|
ModuleThreadNum int `json:"module_thread_num"`
|
||||||
DisablePing bool `json:"disable_ping"`
|
DisablePing bool `json:"disable_ping"`
|
||||||
DisableBrute bool `json:"disable_brute"`
|
DisableBrute bool `json:"disable_brute"`
|
||||||
|
DisableSubnetProbe bool `json:"disable_subnet_probe"`
|
||||||
AliveOnly bool `json:"alive_only"`
|
AliveOnly bool `json:"alive_only"`
|
||||||
|
|
||||||
// 认证
|
// 认证
|
||||||
@@ -199,6 +200,7 @@ func (h *ScanHandler) runScan(req ScanRequest) {
|
|||||||
}
|
}
|
||||||
fv.DisablePing = req.DisablePing
|
fv.DisablePing = req.DisablePing
|
||||||
fv.DisableBrute = req.DisableBrute
|
fv.DisableBrute = req.DisableBrute
|
||||||
|
fv.DisableSubnetProbe = req.DisableSubnetProbe
|
||||||
fv.AliveOnly = req.AliveOnly
|
fv.AliveOnly = req.AliveOnly
|
||||||
fv.Username = req.Username
|
fv.Username = req.Username
|
||||||
fv.Password = req.Password
|
fv.Password = req.Password
|
||||||
|
|||||||
Reference in New Issue
Block a user