LoginSignup
18
21

More than 5 years have passed since last update.

golang pcap on Windows

Last updated at Posted at 2014-06-16

環境構築が問題になりやすそうなので、ここに書いておく。

golang は Path から gcc を検索する。Windows 版 は MinGW gcc を使うようになっている。私の環境は Windows 8.1 64 bit なので、ダウンロードサイト から go1.2.2.windows-amd64.msi を選んだ。この時点で MinGW も 64 bit 版が必要になる。

普段から cygwin を使っているので、mingw は cygwin パッケージ化されたものを使うことにした。cygwin パッケージで mingw64-x86_64-gcc-core, mingw64-x86_64-binutils, mingw64-x86_64-headers, mingw64-x86_64-runtime を選択してインストールする。あるいはもちろん cygwin を使わずに MinGW を単体を直接入れても良い。ただし MinGW とは独立した Mingw-w64 というプロジェクトがあり、64 bit 版はそちらからインストールすること。

golang のライブラリは、GOPATH を使ってツリー管理する。ここでは testproj 以下に作ることにする。

mkdir testproj
export GOPATH=$(cygpath -d `pwd`/testproj)

gopacket を取得する。次のコマンドを実行すると testproj 以下にソースが取得される。

go get code.google.com/p/gopacket

code.google.com/p/gopacket/pcap のために WinPcap developer pack が必要。WpdPack というディレクトリが C:\WpdPack になるように展開して配置する。こうする理由は、gopacket/pcap/pcap.go#cgo windows CFLAGS: -I C:/WpdPack/Include などと書いてある内容と合致させるため。

ここまでセットアップできたら gopacket を使ったプログラムを書いてみる。

package main

import (
        "code.google.com/p/gopacket/pcap"
        "fmt"
)

func main() {
        ifs, err := pcap.FindAllDevs()
        if err == nil {
                for _, ife := range ifs {
                        fmt.Println(ife.Name, ife.Description)
                }
        }
}

実は現時点では gopacket を少し手直ししないといけない。パッチ送ったら、すぐに修正取り込んでくれた#13, #14ので、今は手直し不要。

cygwin mingw でうまく使うにはコツがある。残念なことに cygwin の mingw gcc は cygwin gcc から呼び出しできない(未対応)。gcc のフラグで切り替えられたらいいのだけれど、まだそこまで出来ていない。alternative のような仕組みもない。/usr/bin/gccx86_64-pc-cygwin-gcc と同一で、cygwin の mingw gcc は x86_64-w64-mingw32-gcc で呼び出さないといけない。ということで、次のようにする。

CC=x86_64-w64-mingw32-gcc LD=x86_64-w64-mingw32-ld go run test_program.go

mingw-w64 をインストールした場合は、PATH を通して、最初に見つかる gcc がそれになるように調整すればOK。

18
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
21