mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-10-16 20:31:46 +08:00
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
//go:build !web
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"slices"
|
|
"strconv"
|
|
"strings"
|
|
"text/tabwriter"
|
|
|
|
"github.com/shadow1ng/fscan/common"
|
|
"github.com/shadow1ng/fscan/common/i18n"
|
|
"github.com/shadow1ng/fscan/plugins"
|
|
)
|
|
|
|
func setPluginDefaultPorts(flags *common.FlagVars) {
|
|
if flags.PortsExplicit || flags.PortsFile != "" || flags.AliveOnly || flags.LocalPlugin != "" {
|
|
return
|
|
}
|
|
|
|
var ports []int
|
|
for _, name := range strings.Split(flags.ScanMode, ",") {
|
|
name = strings.TrimSpace(name)
|
|
if name == "" {
|
|
continue
|
|
}
|
|
defaults := plugins.GetPluginPorts(name)
|
|
// Web、本地插件和特殊模式没有固定端口,保留通用端口范围。
|
|
if len(defaults) == 0 {
|
|
return
|
|
}
|
|
ports = append(ports, defaults...)
|
|
}
|
|
if len(ports) > 0 {
|
|
flags.Ports = formatPluginPorts(ports)
|
|
}
|
|
}
|
|
|
|
func formatPluginPorts(ports []int) string {
|
|
ports = slices.Clone(ports)
|
|
slices.Sort(ports)
|
|
var values []string
|
|
for _, port := range slices.Compact(ports) {
|
|
values = append(values, strconv.Itoa(port))
|
|
}
|
|
return strings.Join(values, ",")
|
|
}
|
|
|
|
func printPluginList(w io.Writer) error {
|
|
names := plugins.All()
|
|
slices.Sort(names)
|
|
table := tabwriter.NewWriter(w, 0, 4, 2, ' ', 0)
|
|
_, _ = fmt.Fprintln(table, i18n.GetText("plugin_list_header"))
|
|
for _, name := range names {
|
|
var types []string
|
|
for _, kind := range []string{plugins.PluginTypeService, plugins.PluginTypeUDP, plugins.PluginTypeWeb, plugins.PluginTypeLocal} {
|
|
if plugins.HasType(name, kind) {
|
|
types = append(types, kind)
|
|
}
|
|
}
|
|
ports := formatPluginPorts(plugins.GetPluginPorts(name))
|
|
if ports == "" {
|
|
ports = "-"
|
|
}
|
|
option := "-m"
|
|
if plugins.HasType(name, plugins.PluginTypeLocal) {
|
|
option = "-local"
|
|
}
|
|
_, _ = fmt.Fprintf(table, "%s\t%s\t%s\t%s %s\n", name, strings.Join(types, ","), ports, option, name)
|
|
}
|
|
return table.Flush()
|
|
}
|