【发布时间】:2017-01-26 23:45:02
【问题描述】:
我有一个 Go 函数,可以在 macOS 上使用 tcpdumb(外部命令)捕获网络流量:
func start_tcpdump() {
// Run tcpdump with parameters
cmd := exec.Command("tcpdump", "-I", "-i", "en1", "-w", "capture.pcap")
if err := cmd.Start(); err != nil {
log.Fatal(err)
}
timer := time.AfterFunc(3 * time.Second, func() {
cmd.Process.Kill()
})
err := cmd.Wait()
if err != nil{
log.Fatal(err)
}
timer.Stop()
}
当这个函数完成工作时,我试图在 Wireshark 中打开输出 .pcap 文件并得到这个错误:
"捕获文件似乎在数据包的中间被剪短了。"
可能,cmd.Process.Kill() 会中断 .pcap 文件的正确关闭。
可以应用什么解决方案来“正确”关闭 tcpdumb 外部进程?
【问题讨论】:
-
tcpdump 表示它通过 SIGINT 或 SIGTERM 正常退出。也许阅读 stdout 和 stderr 以查看是否有任何相关消息。
标签: go