命令行窗口

问题描述

我只是想在我的系统上使用 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 结构体的 ArgsCmd 字段的值...).

注意:此处使用 panic() 不是一个好习惯,而是使用 log.Fatal()。此外,最好直接运行 nmap 并在代码中处理其输出。查看使用 Output()CombinedOutput()Start() 读取其他命令输出的示例,具体取决于您尝试执行的操作以及命令的行为方式。