ポン酢ブログ(β)

The harder you work, the luckier you get. - Gary Player

pcapをパースする(その1・ヘッダ編)

libpcapで使われる、pcapファイルのパースにチャレンジしてみる。 今回はヘッダと生のパケットを取り出すところまでです。

パケットの構造

このブログの情報を参考にさせていただいた。この先にリンクされている、日立の資料の図がわかりやすい。

sorenuts.hatenablog.com

Global Header

マジックナンバーやタイムスタンプが格納されている。

パケット

Record(Packet) Header

incl_lenが実際のパケット長なので、これの長さ分を取り出してくれば良い。

Packet Data

incl_len分のパケットが入っているので、これを取り出せば良い。

実際にパースする

Golangで実際に読み込んでパースしてみる。 https://github.com/atpons/39ac/blob/ef55112/pcaptool/pkg/pcap/read.go で実装している。

これをWiresharkのSampleCapturesで配布されているipv4frags.pcapで、実行してみると、このような結果になり、実際にWiresharkで見比べても正しく並んでいることが分かる。

おしまい

  • スライス作りすぎなのでどうにかしていきたい
    • 今後は消しても問題なくなるように作るのでsync.Poolをちゃんと使っていくか再利用するなどをしたい