问题描述
我只是想在我的系统上使用 Go 和以下主要功能运行 nmap 扫描
func main() {
execErr := exec.Command("cmd","/c","nmap -T4 -A -v localhost")
if execErr != nil {
panic(execErr)
}
}
令人恐慌。我试图在线搜索文档,但还没有找到任何对 Windows 有用的东西。有人可以提供帮助或指出一些资源吗?
解决方法
exec.Command()
不返回 error
而是 *Cmd
类型的结构,然后您可以在其上调用方法 Run()
(或其他方法,请参见下面的注意)来执行像这样的命令:
cmd := exec.Command("cmd","/c","nmap -T4 -A -v localhost")
err := cmd.Run()
if execErr != nil {
log.Fatal(err)
}
您的代码 panic
s 因为 exec.Command("cmd","nmap -T4 -A -v localhost")
返回一个指向 Cmd
结构的有效非 nil 指针(恐慌消息可能是 cmd.exe
的完整路径,然后是您提供的参数它们是 Path
结构体的 Args
和 Cmd
字段的值...).
注意:此处使用 panic()
不是一个好习惯,而是使用 log.Fatal()
。此外,最好直接运行 nmap
并在代码中处理其输出。查看使用 Output()
、CombinedOutput()
和 Start()
读取其他命令输出的示例,具体取决于您尝试执行的操作以及命令的行为方式。