ネットワークエンジニアのためのハイエンドおもちゃ:入門から熟練まで、コレクションできるWireShark!

パケット キャプチャは、すべての技術者が習得している基本的な知識である必要があります。テクニカル サポート、運用保守担当者、研究開発担当者のいずれであっても、パケットをキャプチャする必要がある状況に遭遇することがあります。使用されるパケット キャプチャ ツールには、fiddle や Wireshark などがあります。パケット担当者をキャプチャする必要があまりない人は、Wireshark の使い方を学ぶだけで十分です。結局のところ、Wireshark は最も包括的な機能と最も多くのユーザーを備えたパケット キャプチャ ツールです。

Wireshark (以前は Ethereal として知られていました) は、ネットワーク パケット分析ソフトウェアです。ネットワーク パケット分析ソフトウェアの機能は、ネットワーク パケットをキャプチャし、可能な限り詳細なネットワーク パケット情報を表示することです。Wireshark は、WinPCAP をインターフェイスとして使用し、ネットワーク カードとデータ パケットを直接交換します。

ネットワーク パケット解析ソフトウェアの機能は、「電気技師の技術者が電気メーターを使用して電流、電圧、抵抗を測定する」作業として想像できます。シーンをネットワークに移植し、ワイヤーをネットワーク ワイヤーに置き換えるだけです。以前は、ネットワーク パケット分析ソフトウェアは非常に高価であるか、商用ソフトウェアにしか属していませんでした。Ethereal の出現はすべてを変えました。GNUGPL 一般ライセンスの保護範囲に基づいて、ユーザーはソフトウェアとそのソース コードを無料で入手でき、ソース コードを変更およびカスタマイズする権利を有します。Ethereal は、世界で最も広範なネットワーク パケット分析ソフトウェアの 1 つです。

Wireshark の公式ダウンロード サイト:http://www.wireshark.org

Wireshark は、非常に強力な機能を備えた非常に人気のあるネットワーク パケット分析ソフトウェアです。さまざまなネットワークパケットを傍受し、ネットワークパケットの詳細情報を表示できます。

Wiresharkはオープンソースソフトウェアなので安心してご利用いただけます。Windows および Mac OS 上で実行できます。

Wireshark でできないこと

セキュリティ上の理由から、Wireshark はパケットの表示のみが可能ですが、パケットの内容を変更したり、パケットを送信したりすることはできません。

Wireshark VS Fiddler

  • Fiddler は Windows 上で実行されるプログラムで、HTTP および HTTPS をキャプチャするために特に使用されます。
  • Wireshark は HTTP と HTTPS を取得できますが、HTTPS を復号化できないため、Wireshark は HTTPS のコンテンツを確認できません

他の同種のツール

  • マイクロソフトネットワークモニター
  • スニッファー

Wireshark を使用する人

  1. ネットワーク管理者は Wireshark を使用してネットワークの問題をチェックします

  2. ソフトウェア テスト エンジニアは Wireshark を使用してパケットをキャプチャし、テストするソフトウェアを分析します

  3. ソケット プログラミングに携わるエンジニアは、デバッグに Wireshark を使用します。

  4. HuaweiやZTEのエンジニアの多くはWiresharkを使うと聞きました。

つまり、ネットワークに関連するあらゆるものに Wireshark が使用される可能性があります。

Wireshark がパケットのキャプチャを開始します

インターフェースを開始します

Wireshark はマシン上の特定のネットワーク カードのネットワーク パケットをキャプチャします。マシン上に複数のネットワーク カードがある場合は、ネットワーク カードを選択する必要があります。

「Caputre」→「Interfaces...」をクリックすると、次のダイアログ ボックスが表示されます。正しいネットワーク カードを選択します。次に、「開始」ボタンをクリックしてパケットのキャプチャを開始します。

Wireshark ウィンドウの概要

WireShark は主に次のインターフェイスに分かれています

  1. Display Filter (表示フィルター)、フィルタリングに使用されます。

  2. パケット リスト ペイン (パケット リスト) には、キャプチャされたパケット、送信元アドレスと宛先アドレス、ポート番号が表示されます。さまざまな色が表す

  3. パケット内のフィールドを表示する「パケット詳細」ペイン

  4. ディセクター ペイン (16 進データ)

  5. その他(アドレスバー、その他)

Wireshark の表示フィルタリング

フィルタリングを使用することは非常に重要ですが、初心者が Wireshark を使用すると、数千、場合によっては数万のレコードの中から多くの冗長な情報が取得され、必要な部分を見つけることが困難になります。めまいがする。

フィルターは、大量のデータの中から必要な情報をすばやく見つけるのに役立ちます。

フィルターは2種類ありますが、

  • 1 つは表示フィルターで、メイン インターフェイスにあるもので、キャプチャされたレコードから必要なレコードを見つけるために使用されます。
  • 1 つはキャプチャ フィルターで、あまりにも多くのレコードがキャプチャされないように、キャプチャされたパケットをフィルター処理するために使用されます。[キャプチャ] -> [キャプチャ フィルタ] で設定します

フィルタを保存

「フィルター」フィールドにフィルターの式を入力した後、「保存」ボタンをクリックして名前を付けます。たとえば、「フィルター 102」、

フィルター欄に「フィルター102」ボタンがあります。

フィルター式のルール

表現規則

1. プロトコルフィルタリング

たとえば、TCP の場合は、TCP プロトコルのみが表示されます。

2. IPフィルタリング

たとえば、ip.src ==192.168.1.102表示元アドレスは 192.168.1.102 です。

ip.dst==192.168.1.102、ターゲットアドレスは192.168.1.102です。

3. ポートフィルタリング

tcp.port ==80、ポート80付き

tcp.srcport == 80の場合、TCP プロトコルのポート 80 のみが表示されます。

4.HTTPモードフィルタリング

http.request.method=="GET", HTTP GET メソッドのみを表示します。

5. 論理演算子は AND/OR です

一般的なフィルター式

フィルタ式 使用
http HTTP プロトコルのレコードのみを表示します
ip.src192.168.1.102 または ip.dst192.168.1.102 送信元または宛先アドレスは 192.168.1.102 です

パケットリストペイン

パケット リストのパネルには、番号、タイムスタンプ、送信元アドレス、宛先アドレス、プロトコル、長さ、およびパケット情報が表示されます。異なるプロトコルが異なる色で表示されていることがわかります。

これらの色の表示ルールを変更することもできます。[表示] -> [色付けルール] を選択します。

パケットの詳細 (パケット詳細ペイン)

このパネルは最も重要であり、契約書のすべてのフィールドを表示するために使用されます。

情報の各行は、

  • フレーム:物理層のデータ フレームの概要
  • Ethernet II:データリンク層のEthernet フレームヘッダー情報
  • インターネット プロトコル バージョン 4:インターネット層のIP パケット ヘッダー情報
  • 伝送制御プロトコル:トランスポート層T のデータ セグメント ヘッダー情報。ここでは TCP
  • ハイパーテキスト転送プロトコル:アプリケーション層の情報。ここでは HTTP プロトコルを示します。

Wireshark と対応する OSI 7 層モデル

TCPパケットの具体的な内容

以下の図から、Wireshark によってキャプチャされた TCP パケットの各フィールドがわかります。

TCP スリーウェイ ハンドシェイク プロセスの分析例

これを見て、基本的にワイヤーシェイクについて予備的な理解ができました。次に、TCP スリーウェイ ハンドシェイクの例を見てみましょう。

3 ウェイ ハンドシェイクのプロセスは次のとおりです。

この図は何度も見たことがありますが、今回は実際に Wireshark を使用して 3 ウェイ ハンドシェイクのプロセスを分析してみます。

Wiresharkを開き、ブラウザ入力を開きますhttp://www.cnblogs.com/tankxiao

Wireshark に http フィルターを入力し、GET /tankxiao HTTP/1.1レコードを選択して右クリックし、[TCP ストリームを追跡] をクリックします。

これを行う目的は、Web サイトを開いているブラウザに関連するデータ パケットを取得することです。次の画像が得られます。

図からわかるように、Wireshark は 3 ウェイ ハンドシェイクの 3 つのデータ パケットを傍受しました。4 番目のパケットは HTTP で、HTTP が接続を確立するために TCP を使用していることを示しています。

最初のハンドシェイクパケット

クライアントは、フラグ ビットを SYN、シーケンス番号を 0 にした TCP を送信します。これは、クライアントが接続の確立を要求することを意味します。以下に示すように

2回目のハンドシェイクのデータパケット

サーバーは確認パケットを送り返します。フラグは SYN、ACK です。確認番号 (Acknowledgment Number) をクライアントの ISN に 1 を加えたものに設定します。つまり、以下に示すように、0+1=1 になります。

3回目のハンドシェイクのデータパケット

クライアントは再度確認パケット(ACK)を送信します SYNフラグは0、ACKフラグは1です そしてサーバーが送信したACKのシリアル番号フィールド+1を確認フィールドに入れて送信しますそして、以下に示すように、データ セグメント +1 に ISN を書き込みます。

このようにして、TCP の 3 ウェイ ハンドシェイクが通過し、接続が確立されます。

1. フィルター条件を設定する

【1】httpとip.addr == 192.168.1.106とtcp.port == 8080

[a] http: ネットワークプロトコルを指定します

【b】ip.addr == 192.168.1.106: サーバーのIPアドレスを指定します。実際の状況に応じて置き換えてください。

【c】tcp.port == 8080、ポート番号を指定します。実際の状況に応じて置き換えてください。

【2】「応募する」をクリック

「適用」をクリックすると、HTTP リクエストと HTTP レスポンスの 2 つのデータ パケットをフィルタリングできます。

2. TCP データ フローを確認します - TCP ストリームに従います

[1] 任意のデータ パケットを右クリックし、[TCP ストリームに従う] を選択します。

このステップでは、TCP 3 ウェイ ハンドシェイク、TCP フラグメント化とアセンブリなど、HTTP データ パケットに関連する TCP データ パケットをフィルタリングして除外できます。

[2] 最後にHTTPリクエストとレスポンスを取得します

[a] 背景が赤のフォントがHTTPリクエスト、背景が青のフォントがHTTPレスポンス

[b] ユーザー エージェントから、360 ブラウザの互換モードは IE8 カーネルを使用していることがわかります (このコンピュータのオペレーティング システムは XP で、IE ブラウザのバージョンは 8)。これは、次のことを意味します360 ブラウザはシステムで IE カーネルを使用します。

ネットワーク内でのクリアコード送信の危険性

クリア テキストで送信されるプロトコルやツールは数多くあります。代表的なものには、telnet、ftp、http があります。この実験では Telnet を使用します。Telnet 経由で Linux サーバーにログインし、Wireshark 経由でパケットをキャプチャしてアカウントとパスワードの情報をキャプチャするとします。

1. まず Wireshark を起動すると、Capture 状態になります。次に、Telnet 経由で Linux サーバーにリモートでログインします。

ログインインターフェイスに入ったら、アカウント番号とパスワードを入力してシス​​テムにログインします。

2. 次に、Wireshark のパケット傍受操作を停止します。ショートカット「停止」を実行するだけです。

ただし、多くの情報が取得されるため、次の図に示すように、表示フィルタ機能を使用して表示内容をフィルタリングし、「式」をクリックしてフィルタ式を選択できます。ここではTELNETを選択できます。

式が決定したら、「適用」を選択して、TELNET を含むパケットのみを除外します。

Telnet セッション全体のすべてのレコードを確認しましょう。Wireshark はセッション レコードを記録できます (QQ でチャットするときの「QQ チャット レコード」と同じです)。Telnet パケットを見つけて、右クリックして [Follow TCP Stream] を見つけます。そして Wireshark はセッション レコード全体を返します。

OK、次のデータ情報が表示されます。赤い部分が送信したデータ、青い部分が受信したデータです。j_0061.gif、何が見えるか教えてください

明確に確認するために、再度送信するデータのみをフィルタリングします。またはデータを受信したばかりです。

ここから、アカウント番号とパスワード情報を正確に取得できます。ログイン:wireshark パスワード:123456、これらに加えて、他の人がどの Web サイトやプライベート ファイルを閲覧しているかをさらに知ることができますが、プライバシーは保証されません。

注: このような状況を回避し、関係者が重要な情報を監視できないようにするには、SSH、SSL、TSL、HTTPS などの暗号化プロトコルを使用して重要なデータを暗号化し、ネットワーク上で送信することができます。 、表示されるコンテンツも暗号化されています。

一般的に使用されるフィルター ルール:

  • キャプチャ フィルタ(CaptureFilters): キャプチャ結果にどのような情報を記録するかを決定するために使用されます。キャプチャを開始する前に設定する必要があります。
  • 表示フィルター(DisplayFilters): キャプチャされた結果の詳細な検索。キャプチャ結果を取得した後、自由に変更できます。
キャプチャフィルター

プロトコル (プロトコル) :

可能な値: etherfddiiparprarpdecnetlatscamoprcmopdltcp および udp

プロトコルが指定されていない場合は、サポートされているすべてのプロトコルがデフォルトで使用されます。

方向:

可能な値: srcdstsrc と dstsrc または dst

送信元または宛先が指定されていない場合は、src or dstデフォルトで「 」がキーワードとして使用されます。

たとえば、「host 10.2.2.2src or dst host 10.2.2.2は「 」と同じです。

ホスト:

可能な値: netporthostportrange

この値が指定されていない場合は、デフォルトで「host」キーワードが使用されます。

たとえば、「src 10.1.1.1src host 10.1.1.1は「 」と同じです。

論理演算:

可能な値: not、and、or。

No (「not」) が最も優先されます。or (「または」) と and (「および」) は同じ優先順位を持ち、演算は左から右に実行されます。

例えば、

「tcp ポート 3128 および tcp ポート 23 ではない」は、「(tcp ポート 3128 および tcp ポート 23 ではない)」と同じです。

「tcp ポート 3128 および tcp ポート 23 ではない」は、「tcp ポート 3128 および tcp ポート 23 ではない」とは異なります。

例:

tcp dst port 3128//宛先 TCP ポートが 3128 のパケットをキャプチャします。

ip src host 10.1.1.1//送信元IPアドレスが10.1.1.1のパケットをキャプチャします。

host 10.1.2.3//宛先または送信元 IP アドレスが 10.1.2.3 であるパケットをキャプチャします。

ether host e0-05-c5-44-b1-3c//宛先または送信元 MAC アドレスが e0-05-c5-44-b1-3c であるパケットをキャプチャします。このマシンとすべての外部ネットワーク間のデータ パケットをキャプチャしたい場合は、ここでの MAC アドレスをルートの MAC アドレスに置き換えることができます。

src portrange 2000-2500//送信元が UDP または TCP で、ポート番号が 2000 ~ 2500 の範囲にあるパケットをキャプチャします。

not imcp//icmp を除くすべてのパケットを表示します。(icmp は通常、ping ツールによって使用されます)

src host 10.7.2.12 and not dst net 10.200.0.0/16//送信元 IP アドレスが 10.7.2.12 であるが、宛先が 10.200.0.0/16 ではないパケットを表示します。

(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8//送信元 IP が 10.4.1.12 または送信元ネットワークが 10.6.0.0/16、宛先 TCP ポート番号が 200 ~ 10000、宛先がネットワーク 10.0.0.0/8 内にあるすべてのパケットをキャプチャします。

src net 192.168.0.0/24

src net 192.168.0.0 mask 255.255.255.0//送信元アドレスが 192.168.0.0 ネットワークであるすべてのパケットをキャプチャします。

フィルターを表示

例:

snmp || dns || icmp//SNMP、DNS、または ICMP パケットを表示します。

ip.addr == 10.1.1.1//送信元または宛先の IP アドレスが 10.1.1.1 であるパケットを表示します。

ip.src != 10.1.2.3 or ip.dst != 10.4.5.6//送信元が 10.1.2.3 ではない、または宛先が 10.4.5.6 ではないパケットを表示します。

つまり、表示されるパケットは次のようになります。

送信元 IP: 10.1.2.3 を除く任意、宛先 IP: 任意

同様に

送信元 IP: 任意、宛先 IP: 10.4.5.6 を除く任意

ip.src != 10.1.2.3 and ip.dst != 10.4.5.6//送信元が 10.1.2.3 ではなく、宛先 IP が 10.4.5.6 ではないパケットを表示します。

つまり、表示されるパケットは次のようになります。

送信元 IP: 10.1.2.3 を除く任意、同時に満たす必要がある宛先 IP: 10.4.5.6 を除く任意

tcp.port == 25//送信元または宛先の TCP ポート番号が 25 のパケットを表示します。

tcp.dstport == 25//宛先TCPポート番号が25のパケットを表示します。

tcp.flags//TCPフラグを含むパケットを表示します。

tcp.flags.syn == 0×02//TCP SYN フラグを含むパケットを表示します。

フィルターの構文が正しい場合、式の背景は緑色になります。赤の場合は表現が間違っています。

おすすめ

転載: blog.csdn.net/weixin_43025343/article/details/132385595