Wiresharkを使ってパケットの中身をのぞいてみる
はじめに
Wiresharkを使ってパケットの中身をのぞいていきたいとおもいます🕵
参考にした方法:
初心者以前の私的にはこの動画がとてもわかりやすかったので、真似していきます(/・ω・)/
やってみよー
<今回やってみること>
http://www.chiseki.go.jp/ への通信で何が起きてるのかを観察します🔍
*httpのほうが暗号化されてなくて分かりやすいらしいので、これを使います
<前準備>
パケットの解析につかうツール:Wiresharkをインストールしておきます
<やってみよー>
① パケットキャプチャをする
この動画↓に方法の解説があるので、参考にキャプチャしてみます📷
- ブラウザで対象のサイト(http://www.chiseki.go.jp/)を開く
- Wiresharkで[イーサネット]を選択して、キャプチャを開始
- 開始したら素早くブラウザに戻って、ブラウザをリロード
- 更新したらWiresharkに戻って左上の停止ボタンをクリック
- *早めに停止しないとパケットをため込みすぎちゃうらしい
② パケットの中身を見てみる
Wiresharkのテーブルには次の内容が記載されています。
No | Time | Source | Destination | Protocol | Length | Info |
---|---|---|---|---|---|---|
パケットのNo | 通信を開始してからの時間 | 送信元のIPアドレス | 宛先のIPアドレス | プロトコル | パケットの長さ | 情報 |
ここで大雑把におきていることを整理すると
- コネクションの確立
- データの送受信
- 切断
が起きています。
🦈 Wireshark まめまめ知識
パケットが多くて内容が見づらい際は[表示テーブル]に"tcp"や"http"で絞り込みをかけることで、対象のプロトコルでのやり取りをみることができます。
また特定の対話(やり取り)に注目してみたい時は、[対話フィルタ]や[対話に色をつける]を使っていくと見やすくなります。
1.コネクションの確立
この3つのやり取りでパソコンとサーバ間でデータの受け渡ししてもいい?の確認がされている
📍用語でいうとスリーウェイハンドシェイクの部分
- [SYN]:PCから http://www.chiseki.go.jp/のサーバに 通信しても良き? と聞いてる部分
- [SYN,ACK]:サーバから いいよん、こっちも通信して良き? と返してる部分
- [ACK]:OK~ と返してる部分
ちなみに 203.180.136.104をウェブブラウザに直接打ち込むとhttp://www.chiseki.go.jp/のサイトが表示されるため、対象のパケットをみていることの確認がとれます。
2.データの送受信
この辺りがデータの送受信をしているパケットたちです📦
No.110の GET HTTP が www.chiseki.go.jp のサイト内容をよこせ~~と要求している箇所になります。
👇
No.111-116にわたってサイトの内容がPCに渡されています。
例えばNo.111の[ACK] は、リクエスト了解!的な感じ、
No.115 の HTTP 200 OK
はリクエストに対して成功したよ の意味になります。
PSHって?
「PSH(Push)」フラグは、受信したデータをすみやかに上位アプリケーションに引き渡すように要求するためのフラグである。おもに受信側の処理を促し応答性能を上げるために利用される。
とのこと。(ほーん、、)
👇
No.115の 200 成功したよ! に対して、No.116 でPC側が成功したの確認したよ [ACK] と返すことで、データの送受信が完了します。
3.切断
データのやり取りが終わったらしっかりと切るための確認もいれます(-ω-)/礼儀正しいー
- No.151[FIN,ACK]は サーバ->PCに 切断しても良き? と聞いていて
- No.168[FIN,ACK]は PC->サーバに いいよーこっちも切っていい? と返している
- それを受けてNo.174[ACK]で サーバ->PC に OK~ と返す
の流れです。
+α サイトの情報をみてみよう
パケットをキャプチャする方法で参照した動画では、キャプチャしたサイトの中身を見る方法も紹介されてましたので 合わせてトライしてみます。(5:27~あたりからあります)
HTTP 200 OK
があるNo.115を確認。Request URIが"http://www.chiseki.go.jp/" なのでこれで問題なさそう( ..)φ
👇
HTTPストリーム機能を使って、http通信の中身をみてみる
対象のパケットに対して右クリック>[追跡]>[HTTPストリーム]をクリック
👇
リクエスト(GET)のところ
と
レスポンス(200 OK)のところ
が表示される。
<!DOCTYPE html>
以下がサイトで使用されているHTMLの中身になります。(IEに対応するための文が垣間見える…)
📍[としてデータを表示]で文字コードをUTF-8にしておけば正しく日本語も表示されるよ(・o・)
おわりに
今回はWiresharkを用いてhttp通信でのパケットのやり取りの流れをのぞいてみました。
ただ、リクエストをして返してるのではなく それがちゃんと行われるために確認[ACK]を挟んでいることが実際に見ることができたのでほほーんレベルが上がった気がします🦈🦈🦈
ちなみにhttps通信については鍵をもってるクライアントからなら覗き見することができるようです🔑
Discussion