1 回答
TA贡献1802条经验 获得超6个赞
像这样的东西应该可以工作,我不确定 tcp 转储中是否有任何特定的命令,例如 -F 可用,如果您想捕获 tcp 转储的纯输出,您可以使用将输出定向到文件> file。-w选项用于wireshark/tcpdump格式,读取并显示
cmd := exec.Command("sh", "-c", "sudo tcpdump -i <eth> host <ip> -w ./testfile")
err := cmd.Run()
if err != nil {
fmt.Println(err)
}
谢谢,@torek,-c 选项可以与 tcpdump 一起使用,在捕获 n 个数据包后退出
cmd := exec.Command("sh", "-c", "sudo tcpdump -i ens33 -c 100 host localhost -w ./testfile")
err := cmd.Run()
if err != nil {
fmt.Println(err)
}
另一种方法是使用cmd.Start
cmd := exec.Command("sh", "-c", "sudo tcpdump -i ens33 -c 100 host localhost -w ./testfile")
err := cmd.Start()
if err != nil {
log.Fatal(err)
}
log.Printf("Waiting for command to finish...")
err = cmd.Wait()
log.Printf("Command finished with error: %v", err)
如果您在 tcpdump cmd 中使用不带 -c 选项的 cmd.run,则 tcpdump 命令会继续无限运行。因此,您无法看到是否在 cmd.Run() 调用之后放置了 print 语句,原因是 exec.Command 失败了,它的工作方式与在 cli 中的工作方式相同,因此如果您需要在前面使用 sodo,您也应该将其放入命令中或从 root 用户运行它。
- 1 回答
- 0 关注
- 122 浏览
添加回答
举报