いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-306 (go-packetメモ-01)(ネットワークインターフェースを表示)

関連記事

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

GoでWireSharkやtcpdumpのようにパケットを直接見たいときなどに利用できるライブラリに

github.com

pkg.go.dev

というのがあります。

今まで使ったこと無かったのですが、使うと面白かったので自分用のメモ代わりにちょこちょこ残しておこうと思います。

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 みたいな感じじゃないはずなので、確認しておくほうが良いですね。

haydz.github.io

リポジトリ

上のサンプルなどは、以下のリポジトリでアップしています。ご参考までに。

github.com

参考情報

Goのおすすめ書籍

Go言語による並行処理

Go言語による並行処理

Amazon


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。