Nmap给出错误信息 "您正在运行一个废弃的选项"

问题描述 投票:-2回答:1

我目前正在制作一个golang程序,这个程序应该是可以运行的,但是由于某些原因,即使我在cmd中输入了相同的选项(例如 -oN test.txt),但由于某些原因,即使我在cmd中输入了同样的选项,它也不能运行,并给我这样的提示:"我的程序没有运行"。错误信息 这很奇怪,因为在命令行中,这行可以工作,但当我试图在我的程序中运行它时,它却不能工作。

源代码在这里。

package main

import (
    "os/exec"
    "os"
    "fmt"
    "strings"
)
func main(){

    fmt.Println("Please enter which scanner tool you wish to use:")
    fmt.Println("nmap for nmap")

    var toolargs []string
    var ipaddress string
    var toolchoice string

    fmt.Scanln(&toolchoice)

    if toolchoice == "nmap" {
        toolargs = nmap()
        fmt.Println(toolargs)
    }else{
        fmt.Println("invalid input")
    }

    fmt.Println("Please enter the IP address you wish to scan:")
    fmt.Scanln(&ipaddress)  

    fmt.Println(toolchoice)
    fmt.Println(toolargs)
    fmt.Println(ipaddress)

    funccmd(toolchoice, toolargs, ipaddress)

    fmt.Scanln()

}

func nmap() []string{
    var NoOfArgs int
    var args1 string
    var args2 string
    var args3 string
    var args4 string
    var args5 string
    var args []string
    fmt.Println("Please enter a number for how many arguments you wish to use:")
    fmt.Scanln(&NoOfArgs)

    switch NoOfArgs{
    case 1:
            fmt.Println("Please enter your argument")
        fmt.Scanf("%s", &args1)
        args = []string{args1}
    case 2:
            fmt.Println("Please enter your arguments, separated with a blank space between arguments (eg. -sn -sS -O)")
        fmt.Scanf("%s %s", &args1, &args2)
        fmt.Println(args1)
        fmt.Println(args2)
        args = []string{args1, args2}
        fmt.Println(args)

        case 3:
            fmt.Println("Please enter your arguments, separated with a blank space between arguments (eg. -sn -sS -O)")
        fmt.Scanf("%s %s %s", &args1, &args2, &args3)
        args = []string{args1, args2, args3}
    case 4:
        fmt.Println("Please enter your arguments, separated with a blank space between arguments (eg. -sn -sS -O)")
        fmt.Scanf("%s %s %s %s", &args1, &args2, &args3, &args4)
        args = []string{args1, args2, args3, args4}
    case 5: 
        fmt.Println("Please enter your arguments, separated with a blank space between arguments (eg. -sn -sS -O)")
        fmt.Scanf("%s %s %s %s %s", &args1, &args2, &args3, &args4, &args5)
        args = []string{args1, args2, args3, args4, args5}
        }
    fmt.Println(args)
    return args
}

func funccmd(toolchoice string, args []string, ipaddress string){
    execpath, _ := exec.LookPath("/usr/bin/nmap")

    stringargs := strings.Join(args, " ")
    fmt.Println(stringargs)
    final := []string{execpath, stringargs, ipaddress}
    fmt.Println(final)
    cmdNmap := &exec.Cmd{
       Path: execpath,
       Args: []string{execpath, stringargs, ipaddress},
       Stdout: os.Stdout,
       Stderr: os.Stdout,
    }
    fmt.Println(args)
    if err := cmdNmap.Run(); err !=nil{
       fmt.Println("Error", err);
    }   
}
go command-line-interface nmap
1个回答
0
投票

问题是你把参数连接到一个单一的字符串中 (stringargs),然后再将它们传递给 exec.Cmd. 它们需要在函数中各自成为一个独立的参数。Args 数组。Nmap把第一个参数看成"-oN results.txt",并把它解析为过时的选项"-o "和文件名 "N results.txt"。这个警告正是为了防止这种错误,因为您很可能不是要创建一个名为 "N results.txt "的输出文件。

© www.soinside.com 2019 - 2024. All rights reserved.