fix(contrib/fvuls): Add flag to specify snmp community for future-vuls discover (#1762)
* add: community option for discover command * fix: README --------- Co-authored-by: 和田皓翔 <wadahiroka@192.168.0.6>
This commit is contained in:
		@@ -100,6 +100,7 @@ future-vuls discover --cidr 192.168.0.0/24 --output discover_list.toml
 | 
			
		||||
 | 
			
		||||
Flags:
 | 
			
		||||
      --cidr string           cidr range
 | 
			
		||||
      --community string      snmp community name. default: public
 | 
			
		||||
  -h, --help                  help for discover
 | 
			
		||||
      --output string         output file
 | 
			
		||||
      --snmp-version string   snmp version v1,v2c and v3. default: v2c
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ var (
 | 
			
		||||
	cidr        string
 | 
			
		||||
	snmpVersion string
 | 
			
		||||
	proxy       string
 | 
			
		||||
	community   string
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
@@ -105,7 +106,10 @@ func main() {
 | 
			
		||||
			if snmpVersion != "v1" && snmpVersion != "v2c" && snmpVersion != "v3" {
 | 
			
		||||
				return fmt.Errorf("Invalid snmpVersion")
 | 
			
		||||
			}
 | 
			
		||||
			if err := discover.ActiveHosts(cidr, outputFile, snmpVersion); err != nil {
 | 
			
		||||
			if community == "" {
 | 
			
		||||
				community = config.Community
 | 
			
		||||
			}
 | 
			
		||||
			if err := discover.ActiveHosts(cidr, outputFile, snmpVersion, community); err != nil {
 | 
			
		||||
				fmt.Printf("%v", err)
 | 
			
		||||
				// avoid to display help message
 | 
			
		||||
				os.Exit(1)
 | 
			
		||||
@@ -145,7 +149,8 @@ func main() {
 | 
			
		||||
 | 
			
		||||
	cmdDiscover.PersistentFlags().StringVar(&cidr, "cidr", "", "cidr range")
 | 
			
		||||
	cmdDiscover.PersistentFlags().StringVar(&outputFile, "output", "", "output file")
 | 
			
		||||
	cmdDiscover.PersistentFlags().StringVar(&snmpVersion, "snmp-version", "", "snmp version v1,v2c and v3. default: v2c ")
 | 
			
		||||
	cmdDiscover.PersistentFlags().StringVar(&snmpVersion, "snmp-version", "", "snmp version v1,v2c and v3. default: v2c")
 | 
			
		||||
	cmdDiscover.PersistentFlags().StringVar(&community, "community", "", "snmp community name. default: public")
 | 
			
		||||
 | 
			
		||||
	cmdAddCpe.PersistentFlags().StringVarP(&token, "token", "t", "", "future vuls token ENV: VULS_TOKEN")
 | 
			
		||||
	cmdAddCpe.PersistentFlags().StringVar(&outputFile, "output", "", "output file")
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ const (
 | 
			
		||||
	DiscoverTomlFileName        = "discover_list.toml"
 | 
			
		||||
	SnmpVersion                 = "v2c"
 | 
			
		||||
	FvulsDomain                 = "vuls.biz"
 | 
			
		||||
	Community                   = "public"
 | 
			
		||||
	DiscoverTomlTimeStampFormat = "20060102150405"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ActiveHosts ...
 | 
			
		||||
func ActiveHosts(cidr string, outputFile string, snmpVersion string) error {
 | 
			
		||||
func ActiveHosts(cidr string, outputFile string, snmpVersion string, community string) error {
 | 
			
		||||
	scanner := pingscanner.PingScanner{
 | 
			
		||||
		CIDR: cidr,
 | 
			
		||||
		PingOptions: []string{
 | 
			
		||||
@@ -42,7 +42,7 @@ func ActiveHosts(cidr string, outputFile string, snmpVersion string) error {
 | 
			
		||||
 | 
			
		||||
	servers := make(config.DiscoverToml)
 | 
			
		||||
	for _, activeHost := range activeHosts {
 | 
			
		||||
		cpes, err := executeSnmp2cpe(activeHost, snmpVersion)
 | 
			
		||||
		cpes, err := executeSnmp2cpe(activeHost, snmpVersion, community)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Printf("failed to execute snmp2cpe. err: %v\n", err)
 | 
			
		||||
			continue
 | 
			
		||||
@@ -100,9 +100,9 @@ func ActiveHosts(cidr string, outputFile string, snmpVersion string) error {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func executeSnmp2cpe(addr string, snmpVersion string) (cpes map[string][]string, err error) {
 | 
			
		||||
func executeSnmp2cpe(addr string, snmpVersion string, community string) (cpes map[string][]string, err error) {
 | 
			
		||||
	fmt.Printf("%s: Execute snmp2cpe...\n", addr)
 | 
			
		||||
	result, err := exec.Command("./snmp2cpe", snmpVersion, addr, "public").CombinedOutput()
 | 
			
		||||
	result, err := exec.Command("./snmp2cpe", snmpVersion, addr, community).CombinedOutput()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("failed to execute snmp2cpe. err: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user