Repository navigation
Expand file tree
/
Copy pathmain_cli_plugins.go
More file actions
74 lines (67 loc) · 1.8 KB
/
Copy pathmain_cli_plugins.go
File metadata and controls
74 lines (67 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//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()
}