pcapをパースする(その1・ヘッダ編)
libpcapで使われる、pcapファイルのパースにチャレンジしてみる。 今回はヘッダと生のパケットを取り出すところまでです。
パケットの構造
このブログの情報を参考にさせていただいた。この先にリンクされている、日立の資料の図がわかりやすい。
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をちゃんと使っていくか再利用するなどをしたい