从Go脚本持续执行tshark

从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("

我试图使用来自的示例从golang脚本执行Tskar

脚本工作正常,但我没有收到任何类型的输出

我想得到的是:

  • 不断运行脚本
  • 捕获一些数据包
  • 提取一些字段值
  • 并分配给变量
  • 需要帮忙吗


    我不知道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 in
    outfile.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
    }