超初心者向けWiresharkの使い方

## Wiresharkとは？
Wiresharkは、ネットワーク上のデータトラフィックをキャプチャし、詳細に解析することができます。通信がどのように行われているか、どのようなデータがやり取りされているかを理解する上で、Wiresharkはとても役に立ちます。

## キャプチャするもの
今回はhttpのパケットの中身を確認するまでの手順を説明していきます。
httpsでもパケットのキャプチャをする方法はあるのですが、手順が複雑なので今回は対象外にします。

## Wiresharkの基本操作
### インストールと設定
Wiresharkは[公式サイト](https://www.wireshark.org/)からダウンロードできます。インストール後、基本的な設定を行いましょう。

### 基本的なインターフェースの説明
Wiresharkを開くと、利用可能なネットワークインターフェースのリストが表示されます。
ここからキャプチャしたいインターフェースを選択してキャプチャを開始できます。
例えばlocalhostに対するリクエストをキャプチャしたい場合はLoopbackを選択します。
今回私はインターネットへの接続をキャプチャするのでWifi: en0を選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/9ecf1730-286e-dcef-65e6-41a7b14129fc.png)


### パケットキャプチャの開始方法
キャプチャを開始するには、インターフェースを選択し、「キャプチャの開始」ボタンをクリックします。
すると選択したインターフェースで行われているパケットの一覧が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/466b243d-55c3-e70d-a01d-b317bf9aa32f.png)

それぞれの列はざっくり以下が記載されています。
| 列名        | 説明                                            | 用途                                                         |
|-------------|-------------------------------------------------|--------------------------------------------------------------|
| **No.**     | 各パケットに自動的に割り当てられる連番。       | パケットの追跡や参照に使用。                                 |
| **Time**    | キャプチャが開始されてからの相対時間。          | イベント発生のタイミングやトラフィックの流れを分析する際に使用。 |
| **Source**  | パケットの送信元のアドレス（IPまたはMACアドレス）。 | どのデバイスやネットワークがパケットを送信しているかを特定。    |
| **Destination** | パケットの宛先のアドレス。                    | どのデバイスやネットワークがパケットを受信する予定かを特定。    |
| **Protocol**| キャプチャされたパケットのプロトコル。          | ネットワーク上で使用されているプロトコルの種類を把握。         |
| **Length**  | パケットのサイズ（バイト数）。                  | トラフィックの量やパケットサイズの分布を分析する際に利用。     |
| **Info**    | パケットに関する追加情報。                      | パケットの内容や特徴を簡単に把握するために使用。               |


## パケットのフィルタリング
### 標準的なフィルタリングコマンド
今のままではさまざまな通信がキャプチャされていて、どれがどれだかよくわからなくなっています。

そんな時のためにWiresharkでは、特定のプロトコルやIPアドレスに対するフィルタリングが可能です。例えば、`tcp.port == 80` はTCPポート80のトラフィックをフィルタリングします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/e5c5e9b7-e127-3b51-04de-1050505c55ef.png)

### よく使うフィルタリングの例
複合的なフィルタリング条件も設定できます。例えば、`ip.src == 192.168.0.1 && tcp` は特定のIPアドレスからのTCPトラフィックを、`http.host == "foo.com"`は特定のドメインのからのTCPトラフィックをフィルタします。

実際に`tcp.port == 80 && http.host == "apiv3.iucnredlist.org"`でフィルタを設定すると条件以外のパケットは表示されなくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/e5e115bd-d7dc-4f02-40f3-ccc6b457fc00.png)


##  パケットデータの分析
### パケットの詳細な調査方法
パケットをクリックすると、その詳細な内容を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/c87ace00-bdcd-df81-01a5-4539e16b74fe.png)

今回はhttpで利用できる利用できるAPIサービス[REDLIST](https://apiv3.iucnredlist.org/api/v3/docs)を試しにPOSTMANで呼び出してリクエスト/レスポンスを見てみようと思います。
またキャプチャされているデータというのがわかりやすいように今回はヘッダーに`hogehoge: fugafuga`を入れています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/96705fb3-6de7-1d54-ee70-eed27ba47cba.png)

リクエストするとWireshark上に1行増えているので、中身を確認すると、Postmanで指定したヘッダーが確認できます🎉
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/bcae6248-9825-35d4-d9e4-2d5bddfc62bc.png)


## 終わりに
最近はパケットキャプチャしたい場面がなかったので、めっきり使わなくなっていましたが、久々に使ってみるとやっぱ便利ツールだなーと思いました。
使い方を覚えていて損はないと思うので、ぜひ使ってみてください。
ちなみに自分は[これ](https://www.amazon.co.jp/%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E3%81%BF%E3%82%84%E3%81%9F-%E3%81%B2%E3%82%8D%E3%81%97-ebook/dp/B076CWFDB8/ref=sr_1_1?adgrpid=61739484668&gclid=CjwKCAiAyp-sBhBSEiwAWWzTnnalBi8j5ii6uGIscA7NSnyfSJ5TW3iAbjG4cG6rEIu3eI8oim4NSRoCXaQQAvD_BwE&hvadid=678984545700&hvdev=c&hvlocphy=1028851&hvnetw=g&hvqmt=e&hvrand=1244201442714422049&hvtargid=kwd-373195754389&hydadcr=27266_14738608&jp-ad-ap=0&keywords=%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8&qid=1703482061&sr=8-1)が良書だと思ってます。


いつかWireshark応用編を書こうと思います。