首页 > 解决方案 > GO 制作多个使用 nmap 的 goroutine

问题描述

我正在尝试使用 Go 的并发性来创建一个脚本,该脚本运行具有不同选项的多个 nmap 扫描,但是每当我尝试运行该程序时,它会在第一次 nmap 扫描完成后退出。有没有办法防止这种情况?

这是代码:

package main

import (
    "syscall"
    "os"
    "os/exec"
    "fmt"
)
func main(){
    args1 := []string{"nmap","-sS","127.0.0.1"}
    args2 := []string{"nmap","-sN","127.0.0.1"}
    args3 := []string{"nmap","-sV","127.0.0.1"}

    go funccmd(args1)

    go funccmd(args2)

    go funccmd(args3)

    fmt.Scanln()

}

func funccmd(args []string){
    env := os.Environ()

    cmdpath, runErr := exec.LookPath("/usr/bin/nmap")
    if runErr != nil {
        panic(runErr)
    }   

    execErr := syscall.Exec(cmdpath, args, env)
    if execErr != nil {
        panic(execErr)
    }
}

标签: go

解决方案


不要使用 syscall.Exec。调用 execve 将当前程序替换为 nmap。改用 exec.Cmd 来执行 nmap。


推荐阅读