概要
オレ、ヒロシ!今日はWiresharkとやらを使ってパケットゲットしてみるぜ!
Wiresharkってなに?
Wireshark
ってのは、ネットワークを流れるデータをゲットして内容を解析・表示するプロトコルアナライザのことだ!
パケットってなに?
パケット(packet)は英語で「小包」を意味するんだぜ!
そんで、データ通信においてネットワーク経由でやりとりされる情報の伝送単位をパケットって呼ぶんだ!
プロトコルってなに?
通信をする上で守らなければいけないお約束のことだぜ!
各種のプロトコルはOSI参照モデルの7レイヤーによって以下のように分類されているんだ!
層(レイヤー) | 名称 | 規格(プロトコル) | 概要 | 利用例 |
---|---|---|---|---|
7 | アプリケーション層 | HTTP,FTP,DNS,SMTP,POPなど | 個々のアプリケーション | www,メール |
6 | プレゼンテーション層 | SMTP,FTP,Telnetなど | データの表現形式 | HTML |
5 | セッション層 | TLS,NetBIOSなど | 通信手段 | HTTPS |
4 | トランスポート層 | TCP,UDP,NetWare/IPなど | エンド間の通信制御 | TCP,UDP |
3 | ネットワーク層 | IP,ICMPなど | データを送る相手を決め最適な経路で送信 | IP |
2 | データリンク層 | PPP,ARP,RARP,Ethernetなど | 隣接する機器同士の通信を実現 | Ethernet |
1 | 物理層 | RS-232,UTP,無線 | 物理的な接続、電気信号 | UTPケーブル,光ファイバーケーブル |
環境
# OS情報
sw_vers
> ProductName: macOS
# Wiresharkのダウンロード(3.6.5)
https://www.wireshark.org/download.html
Wiresharkを使ってパケットをゲットしてみる
Wiresharkは無線(Wi-Fi)、有線(Ethernet)両方のパケットをキャプチャできるけど今回は無線のパケットをゲットしてみるぜ!
こんな感じで、たくさんのパケットがゲットできたな!やったぜ!それじゃあ次はいくつかのプロトコルにそれぞれフォーカスして説明していくな!
TCPの概要
まずはTCPって奴の説明をしていくぜ!
TCPは、安全性重視で会話のキャッチボールをしようぜ!
っていう通信をする特性があるんだ!TCPでは通信の最初に3ウェイハンドシェイク
という通信をするんだ!
下の図にあるようにSYN
やACK
はフラグと呼ばれていて、次にどのようなフラグで通信するか手順が決まっているぜ!
それじゃあ実際にパケットを見てみるぜ!
WiresharkでゲットしたパケットでもちゃんとSIN
=>SYN, ACK
=>ACK
という順番で通信しているのが分かるな!
通信を終了するときもちゃんとFIN, ACK
=>ACK
=>FIN, ACK
=>ACK
という順番で通信してるな!
UDPの概要
次はUDPって奴の説明をしていくぜ!
UDPは、スピード重視で会話のキャッチボールをしようぜ!
っていう通信をする特性があるんだ!UDPではTCPのように3ウェイハンドシェイクを行わないぜ!だから速い且つサーバー側の負荷も少なくて済むんだ!
あと、UDPはDNS(Domain Name System)のようなサーバー側で大量の通信を受け付ける場合に使われるぜ!
※DNSってのは、ドメイン名(コンピュータを識別する名称)をIPアドレスに自動的に変換してくれる奴のことだ!
それじゃあ実際にパケットを見てみるぜ!
こんな感じでUDPのパケットが飛んでいるのが分かるな!
ICMPの概要
次はICMPって奴の説明をしていくぜ!
ICMPってのは、Internet Control Message Protocolの略で、IPプロトコルの「エラー通知」や「制御メッセージ」を転送するためのプロトコル
なんだぜ!ICMPメッセージには機能毎にいくつかのタイプがあって、主要なメッセージタイプと機能は以下の図の通りだ!ちなみに、皆んさんお馴染みのping
はこのICMPプロトコルを使用したプログラムだぜ!
タイプ | 機能 |
---|---|
0 | エコー応答(echo reply) |
3 | あて先不達(destination unreachable) |
5 | リダイレクト要求(redirect、経路変更要求) |
8 | エコー要求(echo request) |
11 | 時間超過(time exceeded) |
13 | タイムスタンプ要求(timestamp request) |
14 | タイムスタンプ応答(timestamp reply) |
15 | 情報要求(information request) |
16 | 情報応答(information reply) |
17 | アドレス・マスク要求(address mask request) |
18 | アドレス・マスク応答(address mask reply) |
それじゃあ実際にパケットを見てみるぜ!
今回はエコー応答(echo reply)
とエコー要求(echo request)
のパケットをゲットだぜ!
あとping
が通らなかったときは、こんな感じであて先不達(destination unreachable)
のパケットが飛ぶぜ!
ARPの概要
次はARPって奴の説明をしていくぜ!
ARPってのは、Address Resolution Protocolの略で、IPアドレスからMACアドレスの情報を得られるプロトコル
なんだぜ!ARPには「ARPリクエスト」と「ARPリプライ」っていう2種類のパケットがあるんだ!ARPリクエストとARPリプライでの組み合わせは下の図の通りだぜ!
通信種別 | opcode | MAC address | IP address | MAC address | IP address |
---|---|---|---|---|---|
ARPリクエスト | 1 | 自分 | 自分 | 00:00:00:00:00:00 | 解決したいIPアドレス |
ARPリプライ | 2 | 自分 | 自分 | リクエスト送信元 | リクエスト送信元 |
それじゃあ実際にパケットを見てみるぜ!
Who has 10.18.128.1? Tell 10.18.184.237
ってあるな!これは、「おーい、みんなー!10.18.128.1のIPアドレスって誰ー?オレ(10.18.184.237)に教えくれ!」って言ってるわけだ!面白いぜ!
mDNS(Bonjour)の概要
最後にmDNS(Bonjour)の説明をしていくぜ!
mDNSってのは、Multicast Domain Name Serviceの略で、ローカルネットワーク内でホスト名からIPアドレスを割り出すために用いられるプロトコル
なんだ!
これまでの名前解決はブロードキャスト、DNSではユニキャスト、mDNSではマルチキャストで名前解決をするんだ!
ブロードキャストとは
1対不特定多数
で行われるデータ通信のことだぜ!
ユニキャストとは
1対1
で行われるデータ通信のことだぜ!
マルチキャストとは
1対複数
で行われるデータ通信のことだぜ!
それじゃあ実際にパケットを見てみるぜ!
おっと!ちゃんとオレのPCが名前解決されたぜ!これは面白いや!
表示フィルター
下の赤枠の小窓に条件構文を直接入力することでディスプレイをフィルタリングできるぜ!
プロトコル(以下など)
tcp
udp
icmp
arp
IPアドレス
送信元IP: ip.src==xxx.xxx.xxx.xxx
送信先IP: ip.dst==xxx.xxx.xxx.xxx
送信元/送信先両方: ip.addr==xxx.xxx.xxx.xxx
ポート番号
TCP: tcp.port==xxx
UDP: udp.port==xxx
組み合わせ
例)mdns&&ip.src==xxx.xxx.xxx.xxx
最後に一言
みんなもパケットゲットだぜ!!!!!!!!!!!!!!!!!