I. SnifferFox とは何ですか。
II. SnifferFox の仕組み
III. SnifferFox のディレクトリ構造
IV. SnifferFox 機能の説明。
V. SnifferFox の機能
VI. SnifferFox を拡張する
Ⅶ. 著者
VIII. 結論
I. SnifferFox とは何ですか
SnifferFox は、Windows プラットフォーム上で実行されるスニファー (Sniffer) です。ローカル コンピューターの指定されたネットワーク カードを通過するすべてのデータ パケットを傍受し、これらのパケットに関する統計を分析および収集するために使用されます。
SnifferFox は、オープン ソース プロジェクトである Winpcap に基づいて開発されています。元のデータ パケットを取得するために、これを選択しました (Socket は IP 層で動作し、ARP および RARP パケットを取得できないため、使用しませんでした)。したがって、SnifferFox をインストールする前に Winpcap をインストールしてください。そうしないと、ネットワーク カードが見つからないというメッセージが表示されます。
私たちはこの Sniffer を開発するために Borland C++Builder を選択しました。約 2 か月の懸命な作業の後、約 6,000 行のコードを書きました (ファイル docs/codestat.txt に詳細な統計が含まれています)。そして、ソフトウェアは最終的に基本的に開発されました。これでアルファ版をリリースできるようになりました。ただし、まだ発見されていないエラーが多数ある可能性があり、将来のバージョンで修正される可能性があります。
SnifferFox は無料で、インストールや登録を必要としない環境に優しいソフトウェアです。コンピュータのレジストリを変更することはなく、直接実行できることをお約束します (もちろん、利便性のために、インストール パッケージを作成しました)。
II. SnifferFox の動作原理 ソフトウェアは、まずネットワーク カードをプロミスキャス モードに設定し、次にネットワーク カードが受信したデータを取得し、TCP/IP プロトコルに従ってデータ パケットを分析し、ユーザーの要件に従って一部のパケットを除外します。その後、残りのパケットがフィルタリングされ、データ パケットがバッファ (指定されたサイズのメモリ ブロック。ユーザーのコンピュータのメモリ サイズに応じて手動で設定可能) に書き込まれ、ユーザー インターフェイスに表示されます。バッファがいっぱいになると、システムは自動的にデータをバッファに書き込みます。
下の図は簡単なイラストです。
SnifferFox はマルチスレッド システムであり、大きく 3 つのスレッド (実装時に実際に使用されたのは 2 つだけ)、パケット キャプチャ スレッド (Sniffer Thread)、プロトコル分析およびフィルタリング スレッド、およびユーザー インターフェイスに分けられます。データリンク層で動作して元のデータフレームを取得できるため、SnifferFox は ARP や RARP などの基礎となるプロトコルをサポートできます。
スニッファーによって傍受されるパケットのデータ量は非常に大きいため、これらすべてのパケットをメモリに保存するのは非現実的です。そのため、ここではオペレーティング システムにキャッシュとバッファという 2 つの概念を導入します。キャッシュは、データ パケットを一時的に保存するリンク リストです。ユーザーのコンピュータに過度の負担をかけないようにするため、このリンク リストの最大長は 5000 に制限されています。このリンク リストの長さがユーザーが設定した上限に達すると、システムは自動的にリンク リストのデータをバッファに書き込み、キャッシュをクリアします。
バッファは、データ パケットを 1 つずつ結合したバイナリ ファイルです。各パッケージをレコードと呼ぶこともできます。その長さは固定されていません。主な理由は、データ パケットのサイズを決定する方法がないためです。
ID(4バイト)、セグメントオフセット(4バイト)、データフレーム関連情報(16バイト)、データ(長さは可変ですが、図の計算式に従って計算できます)の4つの部分で構成されます。セグメント オフセットはレコード長であり、主にレコードの終了位置と次のレコードの開始位置を決定するために使用されます。
III. SnifferFox のディレクトリ構造 もちろん、ここで説明しなければならないのは、リリース バージョンと開発バージョンのディレクトリ構造は異なるということですが、開発バージョンではより多くのディレクトリがあり、より複雑になりますが、リリース バージョンのディレクトリは異なります。すべてリリース バージョンに含まれるため、ここではリリース バージョンと比較できる開発バージョンのディレクトリのみを紹介します (docs/dir.txt を参照)。
+スニッファフォックス
+Bin コンパイラによってコンパイルされたバイナリ ファイルにはダイナミック リンク ライブラリ ファイルが含まれます
+Config 構成ファイル
+画像写真
+コンパイラによって生成されたObj中間ファイル
+Docs ドキュメント ディレクトリ
+プロジェクトのプロジェクトディレクトリ
+コアコアコード、主に自己定義のデータ構造とその実装
+グラフィカルインターフェイスを実装するためのGUIコード
+Lang の多言語サポート
+Cache キャッシュ ディレクトリ。一時ファイルの保存に使用されます。
+ 3Com システムで使用されるサードパーティ製コントロール
+ユーザーファイルの保存に使用されるユーザーディレクトリの保存
IV. SnifferFox 機能の説明
1. データ パケットの傍受 ユーザーは、コンピュータのネットワーク カードを指定し、SnifferFox を使用して、このネットワーク カードを通過するすべてのデータ パケットを傍受できます。これらのパッケージをインターセプトした後、システムは、必要に応じて、パッケージの概要情報をリストの形式で表示し、パッケージの特定の情報をパネルの形式で表示します。
2. パケット フィルタリング: 要件を満たすパケットを取得した後、さまざまな要件に従って、傍受したパケットをフィルタリングできます。プロトコル フィルタと IP アドレス フィルタの 2 つの異なるフィルタを定義できます。これら 2 つのフィルタは同時に機能し、これら 2 つの要件を満たすパケットのみが保持され、要件を満たさないその他のパケットは破棄されます。
3. パケット統計機能 傍受したパケットの分布状況をわかりやすくするために、プロトコルレベルごとにパケットの割合と数をカウントするデータパケット統計機能を提供します。それを図形式で表示します。
4. プロトコル解析 パケットの種類に応じて、状況に応じてパケットデータを解析して表示します。 SnifferFox は、データ リンク層からアプリケーション層まで、多数のプロトコル タイプをサポートしています。
アプリケーション層以下のプロトコルを詳細に分析し、データパケットのあらゆるフィールドを取り出しました。アプリケーション層については、現時点では 112 プロトコルのみが特定されていますが、アプリケーション層のプロトコルは非常に多く、それぞれのプロトコルが非常に複雑であるため、詳細な分析は行っていません。
5. スマートソート ユーザーが指定されたパッケージを素早く見つけやすくするために、ユーザーがデータパケットの傍受を停止したときにリスト内のフィールドの 1 つをクリックするだけで、システムが自動的にソートする機能が提供されます。リスト内のデータを昇順に並べ替えるには、もう一度クリックして並べ替え方法を切り替えます。
6. ネットワークカード情報の検出 システム内のネットワークカード(仮想ネットワークカードを含む)の数を自動的に検出し、メニューリストに動的に表示します。同時に、ネットワークカードの関連情報を検出できます。
7. パケットを傍受するためのデーモン プロセスとしてテストした後、SnifferFox はクラッシュすることなくコンピュータ上で数日間実行できるため、これを特殊なパケット インターセプト プログラムとして使用し、デーモン プロセスのように実行できます (もちろん、これには特定の機能があります)。このバージョンではバッファ ファイルをチャンクに分割していないため、インターセプトされたパケットが多すぎる場合は、この機能が将来のバージョンで追加される可能性があります。
8. 動的なステータス表示 パッケージをインターセプトするときにユーザーの他の作業に影響を与えないように、SnifferFox を最小化すると、SnifferFox は自動的にタスクバーに表示されなくなり、動作中は小さなトレイ アイコンのみが表示されます。動的に実行され、停止するとフリーズします。さらに、システムのステータスを表示するための小さなフローティング ウィンドウも作成しました。これはデフォルトでウィンドウの上部に配置されます。
9. データ パケットの保存とロード ユーザーは、傍受したパケットを指定したファイル (拡張子 *.sni) に保存し、必要に応じて SnifferFox を介してロードすることができます。まったく違いはなく、どのページを表示するかを動的に決定することもできます (システムにはすでにページング機能があり、それが動的ページングです。各ページのレコード数を自分たちで定義できます)。
10. 保存されたユーザー オプションとシステム オプションの内容は、ファイル内の config/config.ini に保存されます。ユーザー設定 (インターフェイス、言語など) が変更されると、その変更はファイルに記録されます。ファイルに保存され、次回システムが実行されるときにこれらの設定に基づいて自動的に応答します。
V. SnifferFox の機能
1. シンプルかつ実用的であることが私たちの目標です。システムの設計と実装は比較的複雑ですが、ユーザーにはシンプルなシステムと実用的なシステムを見てもらいたいと考えています。
2. 美しいインターフェース
SnifferFox のインターフェースについては何も言うことはありません。システムには 5 セットの標準インターフェース (Winxp、MacOS、Protein、DeepBlue、BlueGrass) が含まれており、システムを再起動せずにシステムインターフェースを置き換えることができます。 (もちろん、これはサードパーティのコントロールのおかげです)。
3. 多言語サポート システムの設計時にこの問題を考慮したため、SnifferFox 自体が多言語をサポートしています。言語を対応する言語に翻訳するだけで済みます。プログラムを変更する必要はありません。 。このシステムはすでに中国語と英語をサポートしており、簡単に切り替えることができます。
4. 比較的優れた拡張性を持っています。言語、インターフェース、プロトコルの点で拡張性が十分に考慮されています。したがって、このバージョンに基づいて新しいバージョンを開発することは比較的容易です。これにより、既存のコードをうまく再利用できます。
5. 操作の利便性 これは私たちがよく考えている問題であり、ユーザーが便利で使いやすいように、システムの操作方法が人々の習慣に一致するように最善を尽くしています。
6. 比較的多数のプロトコルをサポートします。イーサネットでは、SnifferFox は TCP/IP ファミリのアプリケーション層以下のほぼすべてのプロトコルを分析しており、112 のアプリケーション層プロトコルを認識できます。
VI. SnifferFox を拡張する
もちろん、SnifferFox の構造をよく理解していない限り、SnifferFox を拡張するのは簡単な作業ではありません。これは 3 つの側面で拡張できます。
1. プロトコルの拡張
SnifferFox はオブジェクト指向の手法を使用して設計と実装を分析するため、これを拡張するには、問題を解決するための対応するプロトコル分析クラスを作成し、それらをメイン プログラムで接続する必要があります。これには、現在のシステム構造を詳細に理解する必要があります。
2. インターフェースの拡張は、サードパーティ制御の SUIPack (3com ディレクトリ) を変更することで実現されます。詳細については、SUIPack の関連ドキュメントを参照してください。
3. 言語拡張 これは SnifferFox の拡張機能の最も単純な部分で、Lang/英語ファイルを直接翻訳するだけです。
Ⅶ. 著者
FoxBackBone チーム: zhengsh、gourf
VIII. 結論 SnifferFox は小さなソフトウェアですが、このドキュメントではほんの一部しか理解できないため、詳しく理解したい場合は、このドキュメントだけでは絶対に十分ではありません。システム設計を詳細に書き出す時間があまりないため、さらに読むのはソース コードのみです。
SnifferFox を使用した後、賞賛、批判、その他の側面に関わらず、SnifferFox に関するご提案やアイデアがございましたら、弊社のメール shaohui_1983#163.com、gouruifeng_529#sohu.com までフィードバックをお送りください。ご支援に感謝いたします。
なお、プログラムではSuipackコンポーネントとWinPcapを使用していますので、こちらのサイトからダウンロードしてください。