2010-12-10 1 views
0

個人用プロジェクトの一部として小さなスニファを書いています。私はNet::Pcap(本当に本当に素晴らしいツール)を使用しています。Perlネットワークフレーム/パケットパーサー

パケット処理ループでは、すべてのヘッダーをアンパックしてデータを取得するのに優れたNet::Frameを使用しています。私はこれがひどく効率的でないかもしれないと心配しています(Net::Frameは素晴らしいですが、私はこのプロジェクトに必要以上に多いようです)。

また、一部のDebianシステムではlibdumbnetを手作業でコンパイルする必要がありました(公式のaptリポジトリで提供されているパッケージは動作していないようですが、Net-Libdnet-0.92はそれを好まなかった)。

私が望むのは、TCPセグメント内のペイロードを取得することです。何か別の選択肢はありますか? ありがとうございます。

P.S.私はちょうどパケットを取ってそれをいくつかのパターンを検索した場合、それは本当に本当に悪いですか( "thedailywtf.com価値"を読んで)?

+0

私は、unpack()がTCPパケットを扱うためにREより良いアイデアであると思います。 – Dallaylaen

答えて

1

私は最近、C言語でPCAPダンプファイルのアンパックを書きました。その後、オープンソースライブラリを代わりに使いたいと思っていました。私はそれがバイナリファイル形式であるので、C言語でPerlよりも簡単だと言わなければならないが、Perlのすべての狂信者には間違いないだろう。

私は何と言うだろうしても、既存のコードを使用すると、それを自分でコーディングよりも速く、すべてのラウンドになるということですが、あなたが本当にしたい場合は、ファイル形式は、オンラインで自由に利用可能であり、実際にはかなり簡単です。

パターン検索はほぼ確実に動作しません。これはバイナリファイル形式であり、パケットは断片化されたり複製されたりする可能性があるので、メッセージの開始と終了を知る唯一の信頼できる方法は、ヘッダーの展開、パケットフラグのチェック、コンテンツの長さフィールドの読み取りなどです。パターン検索は時間の90%で動作しますが、ある時点でコードを変更する必要があることを意味するパケットキャプチャログがあります。そして、しばらくして、別のパケットを見つけて、別の変更を意味します。

+0

好奇心が強いのは、あなたが使っていたオープンソースのライブラリは? – nc3b

+0

libpcap。これは、tcpdump、Wiresharkなどで使用される基盤となるPCAPライブラリです。Net :: PcapやNet :: Frameのための基礎となるライブラリでもあります。 – AlastairG