関連記事
概要
以下、自分用のメモです。忘れないうちにメモメモ。。。
GoでWireSharkやtcpdumpのようにパケットを直接見たいときなどに利用できるライブラリに
というのがあります。
今まで使ったこと無かったのですが、使うと面白かったので自分用のメモ代わりにちょこちょこ残しておこうと思います。
Linux (Ubuntu) 上で遊んでいますので、Windowsの場合はWinPcap (WireSharkをインストールするときについでにインストールできたはず)が必要になると思います。
インストール
libpcap
が必要ですので、以下でインストールします。
$ sudo apt install libpcap-dev
あと、tcpdumpが入っていない場合は以下もついでに入れておきます。(これはオプショナルです)
$ sudo apt install tcpdump
試してみる
使い方に関しては、上に挙げている go-packet の godoc の方に詳しく書かれています。
今回は、ローカルのネットワークインターフェースを出力してみます。
pcap.FindAllDevs
関数を使うと結果が返ってきます。
// Package main is the example of pcap.FindAllDevs() package main import ( "fmt" "log" "github.com/google/gopacket/pcap" ) func main() { if err := run(); err != nil { log.Fatal(err) } } func run() error { var ( ifs []pcap.Interface err error ) ifs, err = pcap.FindAllDevs() if err != nil { return err } for _, aIf := range ifs { fmt.Printf("Name=%-20vDescription=%v\n", aIf.Name, aIf.Description) } return nil }
以下、Gitpod上で実行してみた結果です。
gitpod /workspace/go-gopacket-example (main) $ task task: [default] go run main.go Name=eth0 Description= Name=any Description=Pseudo-device that captures on all interfaces Name=lo Description= Name=tunl0 Description= Name=bluetooth-monitor Description=Bluetooth Linux Monitor Name=nflog Description=Linux netfilter log (NFLOG) interface Name=nfqueue Description=Linux netfilter queue (NFQUEUE) interface Name=dbus-system Description=D-Bus system bus Name=dbus-session Description=D-Bus session bus
Linuxなどの場合は大抵 eth0 とかを使うことになると思いますが、Windowsの場合はここの名前が eth0 みたいな感じじゃないはずなので、確認しておくほうが良いですね。
リポジトリ
上のサンプルなどは、以下のリポジトリでアップしています。ご参考までに。
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。