WiresharkなどでインタフェースをanyにするとL2がEthernetではなくSLL(Linux cooked-mode capture)になってしまいキャプチャファイルが他のツールで読めなくなることがあるので、SLLをEthernetに書き換える方法をメモ。
- SLL(wiki.wireshark.org)
- TCPREWRITE(tcpreplay.synfin.net)
tcprewrite --dlt=enet --enet-dmac=送信先MACアドレス --enet-smac=送信元MACアドレス --infile=入力するキャプチャファイル --outfile=出力するキャプチャファイル 例: tcprewrite --dlt=enet --enet-dmac=00:00:00:00:00:00 --enet-smac=00:00:00:00:00:00 --infile=sll.pcap --outfile=ethernet.pcap
上記方法で注意すべき点は3つ2つ。
tcprewriteはpcapngが読み込めない(Wiresharkやeditcapでpcapに変換すれば良い)tcprewrite version: 3.4.3 (build 2375)で問題無く動くことを確認した- 全てのパケットのL2が書き換えられる(WiresharkでSLLだけ抽出して書き換えてmergecapすれば良い)
- 全てのパケットのMACアドレスを正しいものに書き換えるのは面倒なので全て00:00:00:00:00:00にしている
そもそもanyでキャプチャするのは後々面倒なのでやめた方が良い気がする。
追記(2013/08/24)
ふと思って最近のtcprewriteでpcapngを書き換えてみたら問題無く動いたので修正。