从Go脚本持续执行tshark
我试图使用来自的示例从golang脚本执行Tskar 脚本工作正常,但我没有收到任何类型的输出 我想得到的是:从Go脚本持续执行tshark,go,tshark,Go,Tshark,我试图使用来自的示例从golang脚本执行Tskar 脚本工作正常,但我没有收到任何类型的输出 我想得到的是: 不断运行脚本 捕获一些数据包 提取一些字段值 并分配给变量 需要帮忙吗 我不知道tshark,但这里有一个可以连续工作的代码,您需要os.Interrupt,然后select package main import ( "os" "os/exec" "os/signal" ) func main() { out := exec.Command("
我不知道tshark,但这里有一个可以连续工作的代码,您需要
os.Interrupt
,然后select
package main
import (
"os"
"os/exec"
"os/signal"
)
func main() {
out := exec.Command("ping", "8.8.8.8")
f1, _ := os.OpenFile("./outfile.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755)
f2, _ := os.OpenFile("./errfile.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755)
out.Stdout = f1
out.Stderr = f2
defer func() {
f1.Close()
f2.Close()
}()
err := out.Run()
if err != nil {
panic(err)
}
var ctrlcInt chan os.Signal
ctrlcInt = make(chan os.Signal, 1)
signal.Notify(ctrlcInt, os.Interrupt)
for {
select {
case <-ctrlcInt:
break
default:
continue
}
}
return
}
主程序包
进口(
“操作系统”
“os/exec”
“操作系统/信号”
)
func main(){
out:=执行命令(“ping”、“8.8.8.8”)
f1,|:=os.OpenFile(“./outfile.txt”,os.O_RDWR | os.O_CREATE | os.O_APPEND,0755)
f2,|:=os.OpenFile(“./errfile.txt”,os.O_RDWR | os.O_CREATE | os.O_APPEND,0755)
out.Stdout=f1
out.Stderr=f2
延迟函数(){
f1.关闭()
f2.关闭()
}()
错误:=out.Run()
如果错误!=零{
恐慌(错误)
}
可变电流转换操作系统信号
ctrlcInt=make(信道操作信号,1)
信号通知(ctrlcInt、操作系统中断)
为了{
挑选{
case Thanke you,将立即测试并返回答案:)好吧,您的代码执行正确,但outfile.txt中没有输出。errfile.txt中有“在em1上捕获”。这意味着tshark被调用并成功执行,但没有输出。这是因为接口em1
中有一些错误,您能试一下吗eric命令类似于执行命令(“tshark”,“v”)
?,如果这给出了put inoutfile.txt
,那么接口em1
就有问题了。我找到了解决方案。执行外部命令时,Go需要相对路径,或者至少在tshark的情况下是这样。因此,使用参数执行/usr/local/bin/tshark可以很好地工作。谢谢!如果手动执行,您会看到任何输出吗n“tshark-i em1”?
package main
import (
"os"
"os/exec"
"os/signal"
)
func main() {
out := exec.Command("ping", "8.8.8.8")
f1, _ := os.OpenFile("./outfile.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755)
f2, _ := os.OpenFile("./errfile.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755)
out.Stdout = f1
out.Stderr = f2
defer func() {
f1.Close()
f2.Close()
}()
err := out.Run()
if err != nil {
panic(err)
}
var ctrlcInt chan os.Signal
ctrlcInt = make(chan os.Signal, 1)
signal.Notify(ctrlcInt, os.Interrupt)
for {
select {
case <-ctrlcInt:
break
default:
continue
}
}
return
}