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".
的输出文件
我目前正在制作一个应该能够 运行 的 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".