golang pcap on Windows
環境構築が問題になりやすそうなので、ここに書いておく。
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)
}
}
}
実は現時点では パッチ送ったら、すぐに修正取り込んでくれた#13, #14ので、今は手直し不要。gopacket
を少し手直ししないといけない。
cygwin mingw でうまく使うにはコツがある。残念なことに cygwin の mingw gcc は cygwin gcc から呼び出しできない(未対応)。gcc のフラグで切り替えられたらいいのだけれど、まだそこまで出来ていない。alternative のような仕組みもない。/usr/bin/gcc
は x86_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。
Author And Source
この問題について(golang pcap on Windows), 我々は、より多くの情報をここで見つけました https://qiita.com/kwi/items/ed1261fb53f78c244e6d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .