全6093文字
PR

 新型コロナウイルス禍で企業ネットワークの姿が変わってきています。ネットワーク管理にも変化に対応した手法が求められています。この特集ではネットワークを流れるパケットをキャプチャーして収集し、Pythonとリレーショナルデータベースを用いて精度よく解析するための実践的なテクニックを紹介します。第2回はパケット解析のツールとしてよく使われる「Wireshark」で「できる」こと、「できない」ことを通してパケットキャプチャーにプログラミングを導入する背景やその考え方を解説します。

 パケット解析をする際によく使われる「Wireshark」をご存じでしょうか。オープンソースソフトウエア(OSS)として現在も活発に開発が続けられています。もはや業界標準と言っても差し支えないポピュラーなツールです。パケットキャプチャーの参考書などでは必ずと言っていいほど取り上げられており、Wiresharkの使い方がパケット解析のすべてであるような印象さえ受けてしまいます。しかし、Wiresharkの使い方を身に付けることがパケット解析のすべてではありません。

 筆者は海外10カ国でITサポートをしていた経験があり、その際に様々な環境でパケットを継続的に取得し、分析していました。パケットはコンピューターの入出力そのものであり、その使い方によって大きく変化します。

 例えば日本ではメールを用いてビジネスの意思疎通をはかることがほとんどだった時代に、チャットツールで会話しながら仕事を進める文化を持つ国がありました。通信を流れるパケットを取得することで、これらのツールや手法の違いをつかめます。通信とは新しいツールや技術によって時代とともに変わり続けるものです。自ら工夫し、環境に合わせたオリジナルの分析をすることで見えてくるものがあります。

Wiresharkではできないこと

 Wiresharkでは1つひとつのパケットを「Dissector(ディセクター)」と呼ぶパーサー(解析エンジン)に通すことで強力なフィルタリング機能を実現しています。あらゆる種類のプロトコルに対応しており、このディセクターにフィルター条件を設定することでトラブルシューティングの際に画面を見やすくし、処理を追えます。

Wiresharkを補完的に利用する
Wiresharkを補完的に利用する
写真 パケットキャプチャーツール「Wireshark」の画面例
[画像のクリックで拡大表示]

 しかしコンピューター間でやりとりされる通信の本質を考えると、トラフィックとは手続きであり、データのやりとりには前後の文脈が存在することに気付きます。そのような文脈を追う必要が出てきたときにWiresharkではそれを柔軟に追うことが難しいという問題があります。

 一部のプロトコルに関して、Wiresharkにも前後のパケットから矛盾を見つけ出す機能が備わっています。TCPにおけるシーケンスナンバーの不整合から再送や順序の入り繰りを検出する機能などが該当します。しかし、これらはよく使われるという理由で特別に実装された機能です。

容量制限

 Wiresharkには一度に扱えるパケットの容量に制限があります。2ギガバイトを超えるパケットキャプチャーファイルを処理できず、エラーになります。連続して2ギガバイト以上のストリームを統合的に扱えないため、長時間にわたる通信を追いかける場合や流量の多い環境の場合、詳細に分析できる時間が短くなるなどの問題が発生します。