go - 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)
}
}
解决方案
不要使用 syscall.Exec。调用 execve 将当前程序替换为 nmap。改用 exec.Cmd 来执行 nmap。
推荐阅读
- python - 如何从 help() 函数中获取 __new__ 的正确签名?
- c++11 - 预处理器宏替换后防止空间
- json - 如何在对象的多个嵌套部分中获取相同的字段
- typescript - 打字稿组合类型
- flutter - 如何使用yield返回错误(来自catch error)
- sunspot-rails - 搜索总是返回表中的每条记录
- reactjs - 更新状态中的参数值
- c - 为什么没有使用 malloc 时堆部分存在
- python - 如何使用 PocketSphinx 语音识别码的结果?
- python - 为什么 emcee.EnsembleSampler.run_mcmc() 函数不会在我的任何步行者的连续步骤中改变我的 emcee.EnsembleSampler.chain 值?