从Go脚本连续执行tshark

时间:2018-08-19 13:34:11

标签: go tshark

我正在尝试使用以下示例从golang脚本执行tskarh     https://tutorialedge.net/golang/executing-system-commands-with-golang/

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

我想要得到的是以下内容:

  1. 连续运行脚本,
  2. 捕获一些数据包,
  3. 提取一些字段值,
  4. 并分配给变量

请帮忙吗?

https://pastebin.com/PeAz7vh9

package main

import (
    "fmt"
    "os/exec"
    "runtime"
)

func execute() {

  // here we perform the pwd command.
  // we can store the output of this in our out variable
  // and catch any errors in err
    out, err := exec.Command("tshark", "-i", "em1").CombinedOutput()

  // if there is an error with our execution
  // handle it here
    if err != nil {
        fmt.Printf("%s", err)
    }

    fmt.Println("Command Successfully Executed")
  // as the out variable defined above is of type []byte we need to convert
  // this to a string or else we will see garbage printed out in our console
  // this is how we convert it to a string
    output := string(out[:])

  // once we have converted it to a string we can then output it.
    fmt.Println(output)
}

func main() {

    fmt.Println("Simple Shell")
    fmt.Println("---------------------")

    if runtime.GOOS == "windows" {
        fmt.Println("Can't Execute this on a windows machine")
    } else {
        execute()
    }
}

1 个答案:

答案 0 :(得分:0)

我不了解tshark,但是这里的代码可以连续工作,您需要os.Interruptselect

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
}

此代码ping 8.8.8.8并写出到outfile.txt,当您按ctrl+c时它将退出。如果有错误,它将写入errfile.txt。您可以拖尾文件并查看输出。希望这会有所帮助。