Nmap 给出错误消息 "You are running a deprecated option"

Nmap giving an error message "You are running a deprecated option"

我目前正在制作一个应该能够 运行 的 golang 程序,但出于某种原因,即使我在 cmd 中输入了相同的选项(例如 -oN test.txt),它没有 运行 并给我这个 error message 这很奇怪,因为在命令行中该行有效但是当我尝试 运行 它在我的程序中时它没有。

源代码在这里:

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);
    }   
}

问题是您在将参数传递给 exec.Cmd 之前将它们连接在一起成为一个字符串 (stringargs)。它们都需要是 Args 数组中的一个单独参数。 Nmap 将第一个参数视为“-oN results.txt”,并将其解析为已弃用的选项“-o”和文件名 "N results.txt"。该警告正是为了防止此类错误,因为您很可能不想创建名称为 "N results.txt".

的输出文件