- ネットワーク
Wiresharkの使い方|画面の見方・フィルター早見表を実例で解説
結論
Wiresharkは、ネットワークを流れる通信(パケット)を記録して中身を見る無料のツールです。インターフェースを選んで記録し、表示フィルターで絞って読みます。
この記事でわかること
- 表示フィルター25例とキャプチャフィルター対応表
- ping・DNS・HTTP・再送の実物のパケット6場面
- インターフェースが出ない・権限など5件の直し方
Wireshark は、パソコンのネットワークの出入口(インターフェース)を通るパケットを写し取り、プロトコルごとに分解して見せます。記録する段階で絞るのが「キャプチャフィルター」、記録したあとで表示を絞るのが「表示フィルター」です。
flowchart TD
N[ネットワークの<br>インターフェース] --> C[記録する<br>キャプチャフィルター]
C --> F[pcapng ファイル]
F --> D[分解して読む<br>表示フィルター]
D --> P[一覧・詳細・<br>バイト列の3区画]
急いでいる人向けに、よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| どこから入手? | 公式 wireshark.org(最新の安定版は 4.6.9) | ダウンロード |
| 記録を始める | インターフェースをダブルクリック(Ctrl+E) | キャプチャの始め方 |
| 特定の IP だけ見る | 表示フィルターに ip.addr == 192.0.2.1 |
表示フィルター |
| DNS だけ見る | 表示フィルターに dns |
表示フィルター |
| 1つの接続を通しで読む | 右クリック→「追跡」→「TCP ストリーム」 | よく使う機能 |
| 日本語にする | 編集→設定→外観→言語 | 日本語化 |
| インターフェースが出ない | Windows は Npcap、Mac は ChmodBPF、Linux は権限 | トラブル |
| 保存する | ファイル→保存(pcapng 形式) | 保存と開き方 |
| 使ってよい範囲 | 自分が管理し、許可を得たネットワークだけ | 使ってよい範囲 |
確認環境:最新版の番号・配布物・対応 OS・インストール手順・フィルターの文法・各機能の説明は、Wireshark 公式サイト(ダウンロードページ、User's Guide、Wiki)と Npcap の公式ガイドで確かめました。画面の日本語のメニュー名とショートカットは、Wireshark の公開ソース(release-4.6 ブランチの日本語翻訳ファイルと画面定義)で確かめています。Linux での権限の設定は、Ubuntu の wireshark-common 4.2.2 パッケージに入っている README.Debian と設定スクリプトで確かめました。パケットの実物は、Ubuntu 24.04.4 LTS(Linux カーネル 6.18)のネットワーク名前空間(ip netns。1台の中に独立したネットワークを作る仕組み)に、クライアントとサーバーの2台を作り、自分で起こした通信だけを TShark 4.2.2(Wireshark のコマンド版。解析部分は Wireshark と同じ)で記録しました。通信は iputils 20240117 の ping、BIND 9.18.39 の dig、curl 8.5.0、Python 3.11.15 で作った小さな DNS・HTTP・HTTPS サーバー、再送は nftables 1.0.9 で一時的にパケットを捨てて起こしています。tcpdump 4.99.4 でも同じファイルを読みました(確認日 2026年10月23日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Wiresharkの使い方|画面の見方・フィルター早見表を実例で解説」
Wiresharkとは(できること・無料か)
この節では、Wireshark が何をする道具で、どんな場面で役立つのかが分かります。
Wireshark は、ネットワークの通信をパケット単位で記録し、プロトコルごとに分解して表示するソフトウェアです。 「パケットキャプチャ」「プロトコルアナライザー」と呼ばれる種類の道具で、無料で使え、ソースコードも公開されています(ライセンスは GNU GPL バージョン2以降。TShark の --version の表示による)。Windows・macOS・Linux で動きます。
1つながらない原因を探す
相手に SYN を送っているのに返事が無いのか、すぐ RST で断られているのかを、パケットで見分ける。
2遅い原因を探す
DNS の応答時間、HTTP の応答時間、TCP の再送の回数を数字で見る。
3プロトコルを学ぶ
3ウェイハンドシェイク、DNS の問い合わせと応答、HTTP のヘッダーを、実物の並びで確かめる。
4自作のプログラムを確かめる
自分の書いたクライアントやサーバーが、意図どおりのデータを送っているかを見る。
Wireshark の仲間のプログラムも、一緒に入ります。
| プログラム | 役割 |
|---|---|
| Wireshark | 画面(GUI)でパケットを記録・表示する本体 |
| TShark | Wireshark のコマンド版。同じ表示フィルター・同じ解析で、結果を文字で出す |
| dumpcap | 実際にパケットを記録するプログラム。Wireshark と TShark は裏でこれを動かす |
| capinfos・editcap・mergecap | 記録したファイルの情報を見る・形式を変える・結合する |
記録は dumpcap が受け持ち、解析は権限の要らない側で行う作りです。 Debian・Ubuntu のパッケージの説明(README.Debian)は、この「権限の分離」で、高い権限で動くのは dumpcap だけで済む、と書いています。
この記事の実物は、画面と同じ解析をする TShark で取りました。GUI の各区画が、TShark のどのオプションの出力に当たるかも、節ごとに対応させています。
Wiresharkを使ってよい範囲(他人の通信を勝手に見ない)
この節では、Wireshark を使う前に守ることが分かります。
Wireshark で見てよいのは、自分が管理しているネットワークと、管理者から許可を得たネットワークの、自分に関わる通信だけです。 パケットには、メールの中身・パスワード・閲覧したページなど、他人の情報がそのまま入っていることがあります。後の節の実物でも、暗号化していない HTTP では、フォームに入れたパスワードがそのまま読めました。
- 会社のネットワークでは、会社の決まりと情報システムの担当の許可に従います。 許可なくパケットを記録すると、社内の規程に反することがあります。
- 通信の秘密は法律で守られています。 電気通信事業法の第4条は「電気通信事業者の取扱中に係る通信の秘密は、侵してはならない。」と定めています。公衆 Wi-Fi など、他人が使うネットワークの通信を記録しません。
- 記録したファイル(pcap・pcapng)は、パスワードや個人情報を含むことがあります。 人に渡す前に、中身と範囲を確かめます。要らなくなったら消します。
- 1記録するネットワークは自分の管理か、許可を得たものか会社・学校のネットワークは管理者に確かめる
- 2キャプチャフィルターで、見たい通信だけに絞ったか関係のない通信をはじめから記録しない
- 3記録したファイルの置き場所と、消す時期を決めたか共有するときは必要なパケットだけを書き出す
- 4TLS の鍵のファイルを人に渡していないか鍵があると暗号化した通信が読める
Wiresharkのダウンロードとインストール(Windows・Mac・Linux)
この節では、自分の OS に Wireshark を入れる手順が分かります。
公式サイト wireshark.org のダウンロードページから、OS に合うものを入手します。 2026年10月23日時点の公式ダウンロードページでは、最新の安定版(Stable Release)が 4.6.9、ひとつ前の安定版(Old Stable Release)が 4.4.19 です。
| OS | 公式の配布物(4.6.9) | 対応する版(User's Guide) |
|---|---|---|
| Windows | x64 と Arm64 のインストーラー、x64 の PortableApps | 延長サポート中の版(Windows 11・10、Server 2022・2019・2016) |
| macOS | Universal(Intel・Apple シリコン共通)の .dmg | macOS 11 以降 |
| Linux | 各ディストリビューションのパッケージ、Ubuntu は公式 PPA も | ほとんどの UNIX 系 |
| ソース | tar.xz | 自分でビルドする |
User's Guide は、必要な空きとして RAM・ディスクとも 500MB 以上、画面は 1280×1024 以上を勧めています(大きなファイルを開くと、さらに要ります)。Windows 10 の 1809・Server 2019 で使える最後の版は 4.6、1607・Server 2016 は 4.4 と書かれています。
Windows にインストールする
インストーラーを入手する
ダウンロードページから x64 か Arm64 のインストーラー(例 Wireshark-4.6.9-x64.exe)を入手する。Wireshark Foundation の署名つき。
既定のまま進める
部品と保存先を選べるが、User's Guide はほとんどの人に既定の設定を勧めている。既定の保存先は C:\Program Files\Wireshark。
Npcap も入れる
「Install Npcap」にチェックを入れたまま進む。Npcap が無いと記録できない(保存したファイルを開くことはできる)。
必要なら再起動する
Npcap が新しくなると、再起動が要ることがある。
- Npcap は、Windows でパケットを記録するためのドライバーです。 インストーラーに最新の Npcap が入っています。サイレント インストール(
/S)では Npcap は入らないと User's Guide は書いています。 - Npcap のインストール画面の選択肢は、Npcap の公式ガイドでは次の意味です。「Restrict Npcap driver's access to Administrators only」は管理者だけが記録できるようにする、「Support raw 802.11 traffic (and monitor mode) for wireless adapters」は無線 LAN のモニター モードを使えるようにする、「Install Npcap in WinPcap API-compatible Mode」は以前の WinPcap と互換の形で入れる、です。特別な用途が無ければ既定のままにします。
- インストーラーの途中の「USB Capture」の画面は、USB 機器の通信を記録するための USBPcap を入れるかの選択です。インストーラーのソース(release-4.6)では「USBPcap is required to capture USB traffic.」と書かれ、試験的(experimental)な扱いです。USB の通信を調べないなら入れずに進めます。
- Wireshark をアンインストールしても、Npcap と個人の設定は残ります。 Npcap はほかのプログラムが使うことがあるためです。Npcap だけを消すと記録できなくなります。
Mac にインストールする
.dmg を開く
Universal の .dmg(Intel・Apple シリコン共通)を入手して開く。
アプリケーションに入れる
Wireshark を「アプリケーション」フォルダーにドラッグする。
ChmodBPF を入れる
.dmg の中の「Install ChmodBPF.pkg」を開く。記録にはこれが要る。
ChmodBPF は、macOS でパケットを記録する装置(BPF)を使えるようにする仕組みです。User's Guide によると、あとから入れるときは、Wireshark の「About Wireshark」の「Folders」タブにある「macOS Extras」を開いても入れられます。
Linux にインストールする
Linux では、ディストリビューションのパッケージから入れます。User's Guide に載っているコマンドです。
# Debian・Ubuntu
sudo apt install wireshark
# Red Hat 系
sudo yum install wireshark wireshark-qt
Linux では、入れただけでは一般ユーザーは記録できません。 Debian・Ubuntu では、インストールのときに「Should non-superusers be able to capture packets?」(root 以外のユーザーも記録できるようにするか)と聞かれます。既定は「いいえ」です。「はい」を選んだあと、使うユーザーを wireshark グループに入れ、ログインし直します。
# あとから選び直す(質問に Yes と答える)
sudo dpkg-reconfigure wireshark-common
# 自分を wireshark グループに入れる(入れたあとログインし直す)
sudo usermod -a -G wireshark $USER
「はい」を選ぶと、パッケージの設定スクリプトは dumpcap の持ち主を root:wireshark にし、setcap cap_net_raw,cap_net_admin=eip で記録に要る権限だけを dumpcap に与えます(wireshark-common 4.2.2 の postinst)。質問の説明には「有効にするとセキュリティ上の危険になりうるので既定は無効」とも書かれています。
Ubuntu で最新の安定版を使いたいときは、公式ダウンロードページが案内している Launchpad の PPA(wireshark-dev/stable)があります。コマンドだけ使うなら、Debian・Ubuntu では tshark のパッケージだけを入れることもできます。
日本語化(言語の設定)
Wireshark の画面の言語は、「Edit」→「Preferences…」→「Appearance」の「Language」で変えます。 日本語の画面では「編集」→「設定…」→「外観」の「言語」です。既定は「Use system setting」(システム設定を利用)で、OS の言語が日本語なら日本語で表示されます(release-4.6 の画面定義と日本語翻訳ファイルで確認)。
この記事では、メニュー名を日本語の画面の表記で書き、必要なところに英語の表記を添えます。日本語の画面では、英語の「Analyze」は「分析」、「Conversations」は「対話」、「Endpoints」は「終端」と訳されています。
Wiresharkの画面の見方(3つの区画)
この節では、メイン画面のどこに何が出ているのかと、1つのパケットの読み方が分かります。
メイン画面は、上から「パケット一覧」「パケット詳細」「パケットバイト列」の3つの区画に分かれています。 一覧でパケットを選ぶと、下の2つにそのパケットの中身が出ます。その上にメニュー、メインツールバー、表示フィルターの入力欄があり、いちばん下がステータスバーです。新しい版には、パケットを図で見せる「パケットダイアグラム」の区画もあります(User's Guide)。
| 区画 | 何が出るか | TShark で同じものを出す |
|---|---|---|
| パケット一覧(Packet List) | 1行1パケット。番号・時刻・送信元・宛先・プロトコル・長さ・情報 | オプションなし(tshark -r ファイル) |
| パケット詳細(Packet Details) | 選んだパケットを層ごとに分解した木 | -V |
| パケットバイト列(Packet Bytes) | 生のバイトを16進数と文字で | -x |
パケット一覧の列
実物の HTTP の通信の一覧です。左から、番号(No.)、記録を始めてからの秒(Time)、送信元(Source)、宛先(Destination)、プロトコル(Protocol)、長さ(Length)、情報(Info)の列です。
$ tshark -r basic.pcapng -Y 'tcp.stream eq 0'
11 0.696316336 10.104.0.10 → 10.104.0.20 TCP 74 49190 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 ...
12 0.696335604 10.104.0.20 → 10.104.0.10 TCP 74 80 → 49190 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 ...
13 0.696345950 10.104.0.10 → 10.104.0.20 TCP 66 49190 → 80 [ACK] Seq=1 Ack=1 Win=64512 Len=0 ...
14 0.696390082 10.104.0.10 → 10.104.0.20 HTTP 142 GET / HTTP/1.1
15 0.696393335 10.104.0.20 → 10.104.0.10 TCP 66 80 → 49190 [ACK] Seq=1 Ack=77 Win=65536 Len=0 ...
16 0.699017355 10.104.0.20 → 10.104.0.10 TCP 250 HTTP/1.0 200 OK [TCP segment of a reassembled PDU]
18 0.699070144 10.104.0.20 → 10.104.0.10 HTTP 123 HTTP/1.0 200 OK (text/html)
- Protocol の列は、そのパケットで解析できたいちばん上の層の名前です。 14番は TCP の上に HTTP が乗っているので「HTTP」と出ます。
- 16番の「TCP segment of a reassembled PDU」は、HTTP の応答が複数のパケットに分かれて届き、次の18番でつなぎ合わせて解析した、という意味です。
パケット詳細の木(14番の GET)
一覧の14番を選ぶと、詳細の区画に次の木が出ます。下の層(Frame・Ethernet)から上の層(HTTP)へ、OSI 参照モデルの順に並んでいます(一部を省いています)。
$ tshark -r basic.pcapng -Y 'frame.number == 14' -V
Frame 14: 142 bytes on wire (1136 bits), 142 bytes captured (1136 bits) on interface s404-c, id 0
Arrival Time: Oct 23, 2026 21:54:20.461029184 JST
[Protocols in frame: eth:ethertype:ip:tcp:http]
Ethernet II, Src: ee:b2:a2:56:c2:30 (ee:b2:a2:56:c2:30), Dst: 0a:93:4b:ad:3d:ca (0a:93:4b:ad:3d:ca)
Internet Protocol Version 4, Src: 10.104.0.10, Dst: 10.104.0.20
Time to Live: 64
Protocol: TCP (6)
Transmission Control Protocol, Src Port: 49190, Dst Port: 80, Seq: 1, Ack: 1, Len: 76
[Stream index: 0]
Flags: 0x018 (PSH, ACK)
[SEQ/ACK analysis]
[iRTT: 0.000029614 seconds]
Hypertext Transfer Protocol
GET / HTTP/1.1\r\n
Host: www.s404.test\r\n
User-Agent: curl/8.5.0\r\n
Accept: */*\r\n
[Full request URI: http://www.s404.test/]
[ ]で囲まれた行は、パケットの中にあるデータではなく、Wireshark が計算して足した情報です。[Stream index: 0](何番目の TCP の接続か)、[iRTT](接続を始めたときの往復時間)などがそうです。- 層の対応は、関連記事「OSI参照モデルとは|7層の早見表とTCP/IP対応・パケット実例」で扱っています。
パケットバイト列
同じパケットの生のバイトです。左が位置、中央が16進数、右が文字です。詳細の区画で行を選ぶと、対応するバイトが強調されます。
$ tshark -r basic.pcapng -Y 'frame.number == 14' -x
0000 0a 93 4b ad 3d ca ee b2 a2 56 c2 30 08 00 45 00 ..K.=....V.0..E.
0010 00 80 61 fe 40 00 40 06 c3 8c 0a 68 00 0a 0a 68 ..a.@.@....h...h
0020 00 14 c0 26 00 50 af f7 6b 84 1a a4 b4 d0 80 18 ...&.P..k.......
0030 00 3f 15 60 00 00 01 01 08 0a 09 d5 20 de 79 91 .?.`........ .y.
0040 16 36 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 .6GET / HTTP/1.1
0050 0d 0a 48 6f 73 74 3a 20 77 77 77 2e 73 34 30 34 ..Host: www.s404
先頭の14バイトが Ethernet、45 00 から20バイトが IP、c0 26 00 50(49190番と80番)から32バイトが TCP、47 45 54(GET)からが HTTP です。
画面の操作のショートカット
| キー | 動き |
|---|---|
| Ctrl+E | キャプチャの開始・停止 |
| Ctrl+K | キャプチャオプションを開く |
| Ctrl+F | パケットを検索する |
| Ctrl+G | 番号を指定してパケットへ移動する |
| Ctrl+↓・Ctrl+↑ | 次・前のパケットへ(一覧以外にいても動く) |
| Ctrl+.・Ctrl+, | 同じ会話(TCP・UDP・IP)の次・前のパケットへ |
| Ctrl+→・Ctrl+← | 詳細の木をすべて開く・すべて閉じる |
| Ctrl+Shift+I | 詳細で選んだ項目を一覧の列にする(列として適用) |
| Ctrl+Alt+1〜8 | 時刻の表示形式を切り替える(4=最初からの秒) |
キーは User's Guide のキーボードの表と、release-4.6 の画面定義で確かめました。macOS では、Alt の操作は Option で行うと User's Guide は書いています。メイン画面のどこかで文字を打つと、表示フィルターの入力が始まります。
キャプチャの始め方と止め方
この節では、記録を始めて止め、最初のパケットを読むまでの手順が分かります。
起動画面のインターフェースの一覧から、使っているネットワークの名前をダブルクリックすると記録が始まります。 選んでから「キャプチャ」→「開始」(Ctrl+E)でも、ツールバーのいちばん左のボタンでも始められます。
インターフェースを選ぶ
Wi-Fi なら Wi-Fi、有線なら Ethernet の名前を選ぶ。
必要ならキャプチャフィルターを入れる
一覧の上の「…このフィルタを利用:」の欄に、例えば host 192.0.2.1 と入れると、その相手との通信だけを記録する。
記録を始め、調べたい操作をする
ダブルクリックか Ctrl+E。ブラウザでページを開くなど、調べたい通信を起こす。
止めて、表示フィルターで絞る
「キャプチャ」→「停止」(Ctrl+E)。上の入力欄に dns などを入れて Enter。
コマンドから始めるときは、インターフェースの名前を指定します。User's Guide の例は wireshark -i eth0 -k(eth0 で記録を始める)です。TShark では、インターフェースの一覧を -D で出し、-i で選びます。実物の環境(クライアント側の名前空間)での一覧です。
$ tshark -D
1. s404-c
2. any
3. lo (Loopback)
4. bluetooth-monitor
5. nflog
...
$ tshark -i s404-c -w basic.pcapng -a duration:6
Capturing on 's404-c'
34 packets captured
| TShark のオプション | 意味 |
|---|---|
-i 名前 |
記録するインターフェース(-D の番号でもよい) |
-f '式' |
キャプチャフィルター |
-w ファイル |
ファイルに保存する(既定は pcapng) |
-c 数・-a duration:秒 |
指定の数・秒数で止める |
-b packets:数 -b files:数 |
分けて保存し、先に作ったファイルから消す(リングバッファー) |
-p |
プロミスキャス モードを使わない |
プロミスキャス モードは、自分あて以外のパケットも受け取るモードで、既定で有効です。 Wireshark の画面では「キャプチャオプション」の「プロミスキャス」の列で切り替えます。スイッチ(スイッチングハブ)でつながった有線のネットワークや Wi-Fi では、自分あて以外のパケットはそもそも届かないことが多く、見えるのは主に自分の PC の通信です。
表示フィルターの書き方(早見表)
この節では、記録したパケットから見たいものだけを出す式を、コピーして使える形で引けます。
表示フィルターは「フィールド名 演算子 値」の形で書き、&&(and)・||(or)・!(not)で組み合わせます。 入力欄の背景は、正しい式なら緑、書きかけや誤りなら赤になります(User's Guide)。Enter を押すか、右の矢印のボタンで適用します。
よく使う表示フィルター25例
| 見たいもの | 表示フィルター |
|---|---|
| ある IP アドレスとの通信 | ip.addr == 192.0.2.1 |
| 送信元・宛先を指定 | ip.src == 192.0.2.1・ip.dst == 192.0.2.1 |
| 2台の間だけ | ip.addr == 192.0.2.1 && ip.addr == 192.0.2.2 |
| サブネットで | ip.addr == 192.168.1.0/24 |
| TCP の80番 | tcp.port == 80 |
| 複数のポート | tcp.port in {80, 443} |
| UDP の53番 | udp.port == 53 |
| ping | icmp |
| DNS | dns |
| 存在しない名前(NXDOMAIN) | dns.flags.rcode == 3 |
| 名前に文字を含む DNS | dns.qry.name contains "example" |
| HTTP のリクエストだけ | http.request |
| POST だけ | http.request.method == "POST" |
| エラーの応答 | http.response.code >= 400 |
| HTTPS の接続の始まり(SNI) | tls.handshake.type == 1 |
| 接続の開始(SYN だけ) | tcp.flags.syn == 1 && tcp.flags.ack == 0 |
| 接続の拒否・切断(RST) | tcp.flags.reset == 1 |
| 再送 | tcp.analysis.retransmission |
| TCP の異常をまとめて | tcp.analysis.flags |
| データを運ぶパケットだけ | tcp.len > 0 |
| 1つの TCP の接続 | tcp.stream eq 1 |
| 中身に文字を含む | frame contains "password" |
| ARP | arp |
| 自分の SSH を外す | !(tcp.port == 22) |
| 番号の範囲 | frame.number >= 100 && frame.number <= 200 |
フィールド名は小文字です。詳細の区画で項目を選ぶと、ステータスバーの括弧の中にその項目のフィールド名(例 ip.src)が出ます(User's Guide)。項目を右クリックして「フィルタとして適用」→「選択済」を選ぶと、その値の式が入力欄に入り、すぐ適用されます(「フィルタとして準備」は適用せずに入れるだけ)。
実物で絞ってみる
ping・DNS・HTTP を混ぜて記録した34個のパケットに、表示フィルターをかけた結果です。
$ tshark -r basic.pcapng -Y 'dns'
7 0.642197178 10.104.0.10 → 10.104.0.20 DNS 96 Standard query 0x8d8d A www.s404.test OPT
8 0.642345785 10.104.0.20 → 10.104.0.10 DNS 89 Standard query response 0x8d8d A www.s404.test A 10.104.0.20
9 0.673133797 10.104.0.10 → 10.104.0.20 DNS 100 Standard query 0x59ff A nothing.s404.test OPT
10 0.673710725 10.104.0.20 → 10.104.0.10 DNS 77 Standard query response 0x59ff No such name A nothing.s404.test
$ tshark -r basic.pcapng -Y 'dns.flags.rcode == 3'
10 0.673710725 10.104.0.20 → 10.104.0.10 DNS 77 Standard query response 0x59ff No such name A nothing.s404.test
$ tshark -r basic.pcapng -Y 'http.request.method == "POST"'
26 0.706459377 10.104.0.10 → 10.104.0.20 HTTP 245 POST /login HTTP/1.1 (application/x-www-form-urlencoded)
$ tshark -r basic.pcapng -Y 'tcp.flags.syn == 1 && tcp.flags.ack == 0'
11 0.696316336 10.104.0.10 → 10.104.0.20 TCP 74 49190 → 80 [SYN] Seq=0 Win=64240 Len=0 ...
23 0.706409223 10.104.0.10 → 10.104.0.20 TCP 74 49204 → 80 [SYN] Seq=0 Win=64240 Len=0 ...
表示フィルターは、表示を変えるだけで、ファイルの中のパケットは消えません。 フィルターを消せば、34個すべてがまた表示されます(User's Guide)。
書き間違えたときのエラー
TShark 4.2.2 で、よくある書き間違いを試したときのエラーです。Wireshark の画面では、同じ式で入力欄が赤くなります。
| 書いた式 | 出たエラー | 直し方 |
|---|---|---|
port 80 |
"80" was unexpected in this context. That read filter code looks like a valid capture filter; maybe you mixed them up? | キャプチャフィルターの書き方。tcp.port == 80 |
HTTP |
"HTTP" is neither a field nor a protocol name. | 小文字の http |
ip.addr = 10.104.0.20 |
"=" was unexpected in this context. | == にする |
tcp.port in {80 443} |
"443" was unexpected in this context. | カンマで区切る {80, 443} |
ip.adr == 10.104.0.20 |
Constant expression is invalid. | フィールド名の綴り ip.addr |
ip.addr != 10.104.0.20 は、「送信元も宛先も 10.104.0.20 ではない」パケットを出します。 User's Guide によると、!= の意味は Wireshark 3.6 で今の形に変わりました。実物でも、すべてのパケットが 10.104.0.20 との通信だったので、ip.addr != 10.104.0.20 と !(ip.addr == 10.104.0.20) はどちらも0件でした。迷ったら !( … ) の形で書くと意味がはっきりします。
キャプチャフィルターと表示フィルターの違い
この節では、2種類のフィルターのどちらを使うかと、書き方の違いが分かります。
キャプチャフィルターは記録する前に絞り、絞られたパケットはファイルに残りません。表示フィルターは記録したあとに表示を絞り、元のパケットは残ります。 書き方も別で、キャプチャフィルターは tcpdump と同じ libpcap(BPF)の文法、表示フィルターは Wireshark 独自の文法です。
いつ絞るか、何が残るか
何が起きるか分からないときは全部記録して表示フィルターで、見たいものが決まっていて長く取るときはキャプチャフィルターで
同じ通信(ping・DNS・HTTP)を、キャプチャフィルター udp port 53 を付けて記録し直すと、ファイルには DNS の4個しか残りませんでした。
$ tshark -i s404-c -f 'udp port 53' -w dnsonly.pcapng -a duration:5
Capturing on 's404-c'
4 packets captured
$ capinfos -c -s basic.pcapng dnsonly.pcapng
File name: basic.pcapng
Number of packets: 34
File size: 4744 bytes
File name: dnsonly.pcapng
Number of packets: 4
File size: 880 bytes
同じ意味の式の対応表
Wireshark に最初から入っているフィルターの例(cfilters と dfilters の2つのファイル)と User's Guide の例から、同じ意味のものを並べました。
| やりたいこと | キャプチャフィルター | 表示フィルター |
|---|---|---|
| ある IP アドレス | host 192.0.2.1 |
ip.addr == 192.0.2.1 |
| 送信元だけ | src host 192.0.2.1 |
ip.src == 192.0.2.1 |
| ネットワーク | net 192.168.1.0/24 |
ip.addr == 192.168.1.0/24 |
| TCP の80番 | tcp port 80 |
tcp.port == 80 |
| DNS を外す | not port 53 |
!(udp.port == 53 || tcp.port == 53) |
| ARP を外す | not arp |
not arp |
| IPv6 だけ | ip6 |
ipv6 |
| MAC アドレス | ether host 00:00:5e:00:53:00 |
eth.addr == 00:00:5e:00:53:00 |
| ブロードキャストとマルチキャストを外す | not broadcast and not multicast |
!(eth.dst[0] & 1) |
最後の行の表示フィルターは、宛先の MAC アドレスの最初のバイトの最下位ビット(グループあての印)を見る式です。Wireshark の既定の色付けルールの「Broadcast」も eth[0] & 1 という同じ考え方の式を使っています。
取り違えたときのエラー
表示フィルターの式をキャプチャフィルターに入れると、記録は始まらず、次のエラーが出ました。
$ tshark -i s404-c -f 'ip.addr == 10.104.0.20'
Capturing on 's404-c'
tshark: Invalid capture filter "ip.addr == 10.104.0.20" for interface 's404-c'.
That string looks like a valid display filter; however, it isn't a valid
capture filter (can't parse filter expression: syntax error).
Note that display filters and capture filters don't have the same syntax,
so you can't use most display filter expressions as capture filters.
-f 'dns' でも同じエラーでした。キャプチャフィルターには「dns」という言葉が無いので、udp port 53 のようにポートで書きます。キャプチャフィルターの式の一覧は、関連記事「tcpdumpの使い方|フィルタ式一覧と出力の読み方」で扱っています(同じ文法です)。
よく使う機能(TCPストリームの追跡・統計・色分け・名前解決)
この節では、パケットを1つずつ見る前に使うと早い機能と、その結果の読み方が分かります。
TCP ストリームの追跡
1つの接続のやり取りを、会話の形で通して読む
分析→追跡→TCP ストリーム
統計
どのプロトコル・どの相手の通信が多いかを、先に数で掴む
統計→プロトコル階層・対話・終端
エキスパート情報
再送や異常を Wireshark が拾い、重要度ごとの一覧にする
分析→エキスパート情報
TCP ストリームの追跡
パケットを選び、右クリック→「追跡」→「TCP ストリーム」を選ぶと、その接続で送った文字と受けた文字が、会話のように並んで表示されます。 メニューでは「分析」→「追跡」→「TCP ストリーム」、キーは Ctrl+Alt+Shift+T です(UDP は U、TLS は S、HTTP は H。release-4.6 のソースで確認)。User's Guide によると、クライアントからサーバーへの文字は赤、サーバーからクライアントへの文字は青で表示され、表示フィルターには自動でその接続だけを出す式が入ります。
TShark では -z follow で同じことができます。ログインのまねをした POST の接続です。
$ tshark -r basic.pcapng -q -z follow,tcp,ascii,1
===================================================================
Follow: tcp,ascii
Filter: tcp.stream eq 1
Node 0: 10.104.0.10:49204
Node 1: 10.104.0.20:80
179
POST /login HTTP/1.1
Host: www.s404.test
User-Agent: curl/8.5.0
Accept: */*
Content-Length: 28
Content-Type: application/x-www-form-urlencoded
user=taro&password=demo-pass
145
HTTP/1.0 200 OK
Server: s404demo/1.0 Python/3.11.15
Date: Fri, 23 Oct 2026 12:54:20 GMT
Content-Type: application/json
Content-Length: 15
15
{"result":"ok"}
===================================================================
暗号化していない HTTP では、フォームに入れたパスワードがそのまま読めます。 Filter: tcp.stream eq 1 は、画面で追跡したときに表示フィルターに入る式と同じ形です。数字(179・145・15)は、それぞれの向きに送ったバイト数です。FTP の ID とパスワードが同じように読める様子は、関連記事「FTPとは|仕組み・ポート・SFTPとの違いをパケットで解説」で扱っています。
統計(プロトコル階層・対話・終端)
「統計」メニューには、記録した全体を数える機能が並んでいます。日本語の画面での名前と、TShark の対応する書き方です。
| 統計メニュー(日本語の画面) | 分かること | TShark |
|---|---|---|
| プロトコル階層(Protocol Hierarchy) | プロトコルごとのパケット数・バイト数 | -z io,phs |
| 対話(Conversations) | 相手ごと・接続ごとの量と時間 | -z conv,tcp |
| 終端(Endpoints) | 端末ごとの送った量・受けた量 | -z endpoints,ip |
| 入出力グラフ(I/O Graphs) | 時間あたりのパケット数の変化 | -z io,stat,1 |
| HTTP | 応答コード・メソッドの数 | -z http,tree |
| DNS | 応答コード・種類の数 | -z dns,tree |
$ tshark -r basic.pcapng -q -z io,phs
Protocol Hierarchy Statistics
eth frames:34 bytes:3222
ip frames:34 bytes:3222
icmp frames:6 bytes:588
udp frames:4 bytes:362
dns frames:4 bytes:362
tcp frames:24 bytes:2272
http frames:4 bytes:591
(http より下の行は省略)
$ tshark -r basic.pcapng -q -z conv,tcp
TCP Conversations
| <- | | -> | | Total |
| Frames Bytes | | Frames Bytes | | Frames Bytes |
10.104.0.10:49190 <-> 10.104.0.20:80 6 645 bytes 6 480 bytes 12 1125 bytes
10.104.0.10:49204 <-> 10.104.0.20:80 5 498 bytes 7 649 bytes 12 1147 bytes
(右側の開始時刻と継続時間の列は省略)
応答にかかった時間を数字で見る
Wireshark は、問い合わせと応答を組にして、かかった時間を計算した欄を足しています。「遅い」を数字で確かめるときに使います。
$ tshark -r basic.pcapng -Y 'dns.flags.response == 1' -T fields -E header=y -e dns.qry.name -e dns.flags.rcode -e dns.time
dns.qry.name dns.flags.rcode dns.time
www.s404.test 0 0.000148607
nothing.s404.test 3 0.000576928
$ tshark -r basic.pcapng -Y 'http.response' -T fields -E header=y -e http.request_in -e http.response.code -e http.time
http.request_in http.response.code http.time
14 200 0.002680062
26 200 0.000389731
dns.time と http.time の単位は秒です。画面では、詳細の区画の [Time: …] を右クリックして「列として適用」(Ctrl+Shift+I)を選ぶと、一覧の列になり、並べ替えで遅いものを上に出せます。-T fields -e は、この「列として適用」をコマンドで行う書き方です。列の並びや表示を変えたいときは、一覧の列の見出しを右クリックして「列の設定…」を開きます。
色分け(色付けルール)の意味
一覧の行の色は、「表示」→「色付けルール…」に上から並んだルールのうち、最初に一致したもので決まります。 User's Guide も、上から順に評価して最初に一致したものが使われるので、細かいルールを上に置く、と書いています。TShark 4.2.2 に入っている既定のルールの順番の一部です。
@Bad TCP@tcp.analysis.flags && !tcp.analysis.window_update && !tcp.analysis.keep_alive && !tcp.analysis.keep_alive_ack@...
@ICMP errors@icmp.type in { 3..5, 11 } || icmpv6.type in { 1..4 }@...
@ARP@arp@...
@ICMP@icmp || icmpv6@...
@TCP RST@tcp.flags.reset eq 1@...
@Checksum Errors@eth.fcs.status=="Bad" || ip.checksum.status=="Bad" || ...
@HTTP@http || tcp.port == 80 || http2@...
@TCP SYN/FIN@tcp.flags & 0x02 || tcp.flags.fin == 1@...
@TCP@tcp@...
@UDP@udp@...
@Broadcast@eth[0] & 1@...
| ルール名 | 一致する条件 | 見るとよいこと |
|---|---|---|
| Bad TCP | TCP の解析で異常が付いた(再送・順序の乱れ等) | 回線や相手の不調。再送の節の実物を参照 |
| TCP RST | RST が立っている | 接続を拒否・強制的に切った |
| ICMP errors | 宛先到達不能・時間切れなど | 経路やポートが閉じている |
| HTTP | HTTP、または TCP の80番 | Web の通信 |
| TCP SYN/FIN | 接続の開始・終わり | 接続の区切り |
実物で、どのルールで色が付いたかを frame.coloring_rule.name で出すと、再送のパケットは「Bad TCP」、80番の SYN は「TCP SYN/FIN」ではなく「HTTP」でした。HTTP のルールが TCP SYN/FIN より上にあり、tcp.port == 80 に先に一致したからです。
$ tshark -r retrans.pcapng --color -T fields -e frame.number -e frame.coloring_rule.name
1 HTTP ← 80番の SYN
4 HTTP ← GET
8 Bad TCP ← [TCP Retransmission]
9 Bad TCP
一時的に、ある会話だけ色を変えるときは、パケットを選んで Ctrl+1〜9 を押します(Ctrl+Space で元に戻す)。色を全部止めるには「表示」→「パケット一覧を色付けする」を外します。
名前解決(IP アドレス・ポート・MAC を名前で表示)
名前解決は、IP アドレスをホスト名に、ポート番号をサービス名に、MAC アドレスの前半をメーカー名に置き換えて表示する機能です。 「表示」→「名前解決」で層ごとに切り替えます(物理アドレス・ネットワークアドレス・トランスポート層アドレス)。TShark 4.2.2 の既定値は、MAC が有効、IP アドレスとポートが無効でした。
$ tshark -r basic.pcapng -Y 'frame.number in {11, 12}' -N dn -o nameres.use_external_name_resolver:FALSE
11 0.696316336 10.104.0.10 → www.s404.test TCP 74 49190 → 80 [SYN] ...
12 0.696335604 www.s404.test → 10.104.0.10 TCP 74 80 → 49190 [SYN, ACK] ...
この例は、外の DNS サーバーには問い合わせず、記録の中の DNS の応答(www.s404.test は 10.104.0.20)だけを使って名前を付けたものです。User's Guide は、名前解決を有効にすると、Wireshark 自身が DNS に問い合わせて余計なパケットを生み、調べている通信に影響することがあると注意しています。また、解決した名前は覚えておかれるので、途中で変わっても反映されず、別の環境でファイルを開くと表示が変わることがあります。原因を探すときは IP アドレスのままで見て、名前は確かめたいときだけ付けると、取り違えを避けられます。
エキスパート情報
「分析」→「エキスパート情報」を開くと、Wireshark が自動で見つけた注意点が、重要度ごとに一覧になります。 ステータスバーの左端の色付きの丸をクリックしても開けます。丸の色は、そのファイルで見つかったいちばん高い重要度です。User's Guide は重要度を、Chat(青。ふつうの流れ)、Note(水色。注目する出来事)、Warn(黄。警告)、Error(赤。不正な形のパケットなど)と説明しています。
$ tshark -r retrans.pcapng -q -z expert
Notes (19)
=============
Frequency Group Protocol Summary
6 Sequence TCP This frame initiates the connection closing
11 Sequence TCP This frame is a (suspected) retransmission
2 Sequence TCP This frame undergoes the connection closing
TShark 4.2.2 では、TCP の再送は Warn ではなく Note に入っていました。-z expert,warn で絞ると0件になるので、再送を探すときは tcp.analysis.retransmission で絞ります。
実物で見る:ping・DNS・HTTPの通信の流れ
この節では、身近な3つの通信が、パケットではどう見えるかが分かります。
クライアント(10.104.0.10)からサーバー(10.104.0.20)へ、ping を3回、DNS の問い合わせを2回(ある名前・無い名前)、HTTP の GET と POST を1回ずつ送り、そのあいだをクライアント側で記録しました。
ping -c 3 -i 0.3 10.104.0.20
dig @10.104.0.20 www.s404.test
dig @10.104.0.20 nothing.s404.test
curl --resolve www.s404.test:80:10.104.0.20 http://www.s404.test/
curl --resolve www.s404.test:80:10.104.0.20 -d 'user=taro&password=demo-pass' http://www.s404.test/login
ping(ICMP)
$ tshark -r basic.pcapng -Y icmp
1 0.000000000 10.104.0.10 → 10.104.0.20 ICMP 98 Echo (ping) request id=0x375c, seq=1/256, ttl=64
2 0.000016577 10.104.0.20 → 10.104.0.10 ICMP 98 Echo (ping) reply id=0x375c, seq=1/256, ttl=64 (request in 1)
3 0.304068185 10.104.0.10 → 10.104.0.20 ICMP 98 Echo (ping) request id=0x375c, seq=2/512, ttl=64
4 0.304090536 10.104.0.20 → 10.104.0.10 ICMP 98 Echo (ping) reply id=0x375c, seq=2/512, ttl=64 (request in 3)
- 要求(Echo request)と応答(Echo reply)が1組です。応答の行の
(request in 1)は、1番の要求への応答だという意味です。 - 応答の詳細には
[Response time: 0.017 ms]が付きます。ping のコマンドが表示したtime=0.067 msとは測る場所が違うので、少し違う値になります。 - 要求に応答が無いと、要求の行に
(no response found!)と出ます。
DNS(UDP の53番)
7 0.642197178 10.104.0.10 → 10.104.0.20 DNS 96 Standard query 0x8d8d A www.s404.test OPT
8 0.642345785 10.104.0.20 → 10.104.0.10 DNS 89 Standard query response 0x8d8d A www.s404.test A 10.104.0.20
9 0.673133797 10.104.0.10 → 10.104.0.20 DNS 100 Standard query 0x59ff A nothing.s404.test OPT
10 0.673710725 10.104.0.20 → 10.104.0.10 DNS 77 Standard query response 0x59ff No such name A nothing.s404.test
0x8d8d は問い合わせの番号(Transaction ID)で、問い合わせと応答で同じ番号になります。No such name は名前が無い(NXDOMAIN)という応答です。8番の詳細の区画では、応答の中身が次のように分解されます(一部)。
Domain Name System (response)
Transaction ID: 0x8d8d
Flags: 0x8580 Standard query response, No error
.... .... .... 0000 = Reply code: No error (0)
Answers
www.s404.test: type A, class IN, addr 10.104.0.20
Time to live: 300 (5 minutes)
Address: 10.104.0.20
[Request In: 7]
[Time: 0.000148607 seconds]
dig の出力とパケットの対応や、NXDOMAIN などの応答の意味は、関連記事「nslookupの使い方|逆引き・DNS指定・MX・エラーの意味を実例で」で扱っています。
HTTP と TCP の3ウェイハンドシェイク
TCP の接続は、SYN → SYN, ACK → ACK の3つのパケットで始まります。これが3ウェイハンドシェイクです。 そのあと HTTP の GET を送り、応答を受け、FIN で両方向を閉じます。1つめの接続の流れを、送った向きと番号だけにして出しました。
$ tshark -r basic.pcapng -Y 'tcp.stream eq 0' -T fields -E header=y \
-e frame.number -e ip.src -e tcp.srcport -e tcp.flags.str -e tcp.seq -e tcp.ack -e tcp.len
frame.number ip.src tcp.srcport tcp.flags.str tcp.seq tcp.ack tcp.len
11 10.104.0.10 49190 ··········S· 0 0 0
12 10.104.0.20 80 ·······A··S· 0 1 0
13 10.104.0.10 49190 ·······A···· 1 1 0
14 10.104.0.10 49190 ·······AP··· 1 1 76
15 10.104.0.20 80 ·······A···· 1 77 0
16 10.104.0.20 80 ·······AP··· 1 77 184
17 10.104.0.10 49190 ·······A···· 77 185 0
18 10.104.0.20 80 ·······AP··· 185 77 57
19 10.104.0.10 49190 ·······A···· 77 242 0
20 10.104.0.20 80 ·······A···F 242 77 0
21 10.104.0.10 49190 ·······A···F 77 243 0
22 10.104.0.20 80 ·······A···· 243 78 0
sequenceDiagram
participant C as クライアント
participant S as サーバー 80番
C->>S: SYN Seq=0
S->>C: SYN, ACK Seq=0 Ack=1
C->>S: ACK Seq=1 Ack=1
C->>S: GET 76バイト
S->>C: 200 OK 184+57バイト
C->>S: FIN と ACK で閉じる
- Ack の値は「次に受け取りたいバイトの番号」です。 14番でクライアントが76バイト送ると、15番でサーバーは Ack=77 を返しています。
- Seq と Ack が0や1から始まるのは、Wireshark が見やすく直した「相対」の番号だからです。 実際の番号は乱数で始まります。
-o tcp.relative_sequence_numbers:FALSEを付けると、11番の SYN はSeq=2952227715、12番はSeq=447001807 Ack=2952227716と表示されました。画面では「編集」→「設定」→「プロトコル」→「TCP」で切り替えます。 tcp.flags.strの S は SYN、A は ACK、P は PSH、F は FIN です。
TCP の接続と切断、状態の移り変わりは、関連記事「ソケットとは|TCPとUDPの違いをPythonの通信とtcpdumpで解説」で扱っています。
TCPの再送の見え方(実物)
この節では、パケットが届かなかったときに Wireshark にどう表示されるのかと、その読み方が分かります。
送ったデータに相手の ACK が返ってこないと、送った側は同じデータを送り直します。Wireshark はそれを見つけて [TCP Retransmission] と表示し、行を黒地に赤い文字(Bad TCP)にします。 クライアント側の名前空間に、ファイアウォール(nftables)で「80番からのデータのパケットを捨てる」規則を0.8秒だけ入れ、そのあいだに HTTP の GET を送りました。
table inet s404 {
chain input {
type filter hook input priority filter; policy accept;
tcp sport 80 tcp flags & psh == psh drop
}
}
$ tshark -r retrans.pcapng -Y 'tcp.stream eq 0'
4 0.000079995 10.104.0.10 → 10.104.0.20 HTTP 142 GET / HTTP/1.1
5 0.000083988 10.104.0.20 → 10.104.0.10 TCP 66 80 → 43540 [ACK] Seq=1 Ack=77 ...
6 0.000613317 10.104.0.20 → 10.104.0.10 TCP 250 HTTP/1.0 200 OK [TCP segment of a reassembled PDU]
7 0.000666549 10.104.0.20 → 10.104.0.10 HTTP 123 HTTP/1.0 200 OK (text/html)
8 0.009699915 10.104.0.20 → 10.104.0.10 TCP 123 [TCP Retransmission] 80 → 43540 [FIN, PSH, ACK] Seq=185 Ack=77 Len=57 ...
9 0.213713402 10.104.0.20 → 10.104.0.10 TCP 307 [TCP Retransmission] 80 → 43540 [FIN, PSH, ACK] Seq=1 Ack=77 Len=241 ...
10 0.645650651 10.104.0.20 → 10.104.0.10 TCP 307 [TCP Retransmission] 80 → 43540 [FIN, PSH, ACK] Seq=1 Ack=77 Len=241 ...
11 1.477664650 10.104.0.20 → 10.104.0.10 TCP 307 [TCP Retransmission] 80 → 43540 [FIN, PSH, ACK] Seq=1 Ack=77 Len=241 ...
12 1.477883571 10.104.0.10 → 10.104.0.20 TCP 66 43540 → 80 [FIN, ACK] Seq=77 Ack=243 ...
- 6番と7番の応答は、記録には写っているのに、クライアントのプログラムには届いていません。 パケットの記録は、ファイアウォールが捨てるより手前で行われるからです。「Wireshark には見えるのに、アプリは受け取っていない」ときは、自分の PC のファイアウォールを疑う手がかりになります。
- サーバーは、ACK が来ないので 8番から11番まで4回送り直しました(元のパケットから 0.009秒・0.21秒・0.65秒・1.48秒後)。0.21秒からあとは、間を倍に近い形で広げています。規則を消したあとの11番が届き、curl は 1.48秒かけて 200 を受け取りました。
次は、接続の最初の SYN, ACK を2.5秒間捨てた場合です。クライアントが SYN を送り直します。
$ tshark -r retrans.pcapng -Y 'tcp.analysis.retransmission' -T fields -E header=y \
-e frame.number -e ip.src -e tcp.flags.str -e tcp.len -e tcp.analysis.rto
frame.number ip.src tcp.flags.str tcp.len tcp.analysis.rto
8 10.104.0.20 ·······AP··F 57 0.009033366
9 10.104.0.20 ·······AP··F 241 0.213100085
10 10.104.0.20 ·······AP··F 241 0.645037334
11 10.104.0.20 ·······AP··F 241 1.477051333
16 10.104.0.10 ··········S· 0 1.008609110
17 10.104.0.20 ·······A··S· 0 1.008611113
18 10.104.0.20 ·······A··S· 0 1.008626828
19 10.104.0.10 ··········S· 0 2.032585928
20 10.104.0.20 ·······A··S· 0 2.032591475
21 10.104.0.10 ··········S· 0 3.056631666
22 10.104.0.20 ·······A··S· 0 3.056649029
tcp.analysis.rtoは、元のパケットを送ってから、この再送までの秒数です。クライアントの SYN(16・19・21番)は、およそ1秒ごとに送り直されました。サーバーは SYN を受け取るたびに SYN, ACK を返し直しており(17・18・20・22番)、これも再送として数えられています。このカーネルのnet.ipv4.tcp_syn_linear_timeoutsは 4 で、最初の4回までは同じ間隔で送り直す設定でした。- 再送が多い区間は、「統計」→「入出力グラフ」で
tcp.analysis.retransmissionのグラフを足すと、時間の流れで見られます。TShark では-z io,stat,1,tcp.analysis.retransmissionです。 - 再送が少しあるのはふつうのことです。 同じ相手で続けて多いときに、回線・Wi-Fi・相手の負荷を疑います。
「つながらない」をパケットで見分ける
- 1SYN を送っているかtcp.flags.syn == 1 && tcp.flags.ack == 0 で、相手の IP・ポートあての SYN があるか
- 2SYN, ACK が返るか返れば相手は待ち受けている。返らず SYN の再送が続くなら、途中で捨てられている
- 3RST が返るかtcp.flags.reset == 1。すぐ RST なら、相手はそのポートで待ち受けていない
- 4その前に DNS が答えているかdns で、名前の問い合わせに No such name や応答なしが無いか
ip・ss・nc でつながらない原因を切り分けるコマンドは、関連記事「Linuxネットワークコマンド一覧|ip/ss/ncで障害切り分け」で扱っています。
HTTPSの中身は見える?(TLSと鍵のファイル)
この節では、暗号化された通信が Wireshark でどこまで見えるのかが分かります。
HTTPS(TLS)の通信は、記録しても中身は「Application Data」としか表示されません。 見えるのは、IP アドレス・ポート・パケットの大きさ・時刻と、接続の最初の Client Hello に入っている接続先の名前(SNI)などです。自己署名の証明書で動く HTTPS サーバーに curl でアクセスし、記録しました。
$ tshark -r tls.pcapng
4 0.001659771 10.104.0.10 → 10.104.0.20 TLSv1 583 Client Hello (SNI=www.s404.test)
6 0.002457633 10.104.0.20 → 10.104.0.10 TLSv1.3 855 Server Hello, Change Cipher Spec, Application Data, ...
8 0.003333182 10.104.0.10 → 10.104.0.20 TLSv1.3 146 Change Cipher Spec, Application Data
9 0.003450567 10.104.0.10 → 10.104.0.20 TLSv1.3 164 Application Data
10 0.003579530 10.104.0.20 → 10.104.0.10 TLSv1.3 321 Application Data
11 0.006895867 10.104.0.20 → 10.104.0.10 TLSv1.3 608 Application Data, Application Data, Application Data
自分の PC のブラウザや curl が書き出した「鍵のファイル」があれば、その通信だけを読める形に戻せます。 Wireshark の Wiki によると、環境変数 SSLKEYLOGFILE にファイルの場所を入れて Firefox・Chrome・curl などを起動すると、そのファイルに鍵が書き出されます。Wireshark では「編集」→「設定」→「Protocols」→「TLS」の「(Pre)-Master-Secret log filename」にそのファイルを指定します(TShark では -o tls.keylog_file:ファイル)。
$ SSLKEYLOGFILE=keylog.txt curl --cacert cert.pem --resolve www.s404.test:443:10.104.0.20 https://www.s404.test/
$ tshark -r tls.pcapng -o tls.keylog_file:keylog.txt -Y http
9 0.003450567 10.104.0.10 → 10.104.0.20 HTTP 164 GET / HTTP/1.1
11 0.006895867 10.104.0.20 → 10.104.0.10 HTTP 608 HTTP/1.0 200 OK (text/html)
- 鍵のファイルには5行(TLS 1.3 の鍵の種類ごとに1行)が書かれていました。
- 鍵のファイルは、パスワードと同じくらい大事な秘密です。 Wiki は、Windows で環境変数を全体に設定すると忘れやすく、すべての TLS の通信を読める状態になるので勧めない、と書いています。確かめ終わったら環境変数を外し、ファイルを消します。
- 他人の端末の通信を読む目的には使いません。読めるのは、鍵を書き出した自分のアプリの通信だけです。
pcapファイルの保存と開き方(pcapとpcapngの違い)
この節では、記録したパケットを保存し、あとから開いたり人に渡したりする方法が分かります。
記録は「ファイル」→「保存」(Ctrl+S)か「…として保存」(Ctrl+Shift+S)で保存します。既定の形式は pcapng です。 保存したファイルは「ファイル」→「開く」(Ctrl+O)で開けます。Windows でインストールのときに関連付けを選んでいれば、ダブルクリックでも開きます。
| 形式 | 拡張子 | 特徴 |
|---|---|---|
| pcapng | .pcapng | Wireshark・TShark の既定。インターフェースの名前やコメントも残せる |
| pcap | .pcap | 以前からの形式。tcpdump などほとんどの道具が読める |
$ editcap -F pcap basic.pcapng basic.pcap
$ captype basic.pcapng basic.pcap
basic.pcapng: pcapng
basic.pcap: pcap
$ od -A x -t x1 -N 8 basic.pcapng
000000 0a 0d 0d 0a bc 00 00 00
$ od -A x -t x1 -N 8 basic.pcap
000000 d4 c3 b2 a1 02 00 04 00
$ ls -l basic.pcap basic.pcapng
-rw-r--r-- 1 root root 3790 Oct 23 21:57 basic.pcap
-rw------- 1 root root 4744 Oct 23 21:54 basic.pcapng
- ファイルの先頭の4バイトで形式が分かります。pcapng は
0a 0d 0d 0a、pcap はd4 c3 b2 a1(リトルエンディアンの印)でした。 - 同じ34個のパケットで、pcapng は 4744 バイト、pcap は 3790 バイトでした。pcapng は付けられる情報が多い分、少し大きくなります。
- 必要なパケットだけを渡すときは、表示フィルターで絞ってから「ファイル」→「指定したパケットをエクスポート…」を使います。 TShark では
tshark -r 元 -Y '式' -w 新しいファイルです。
長時間の記録は分けて保存する
長く記録するとファイルが大きくなり、開くのも遅くなります。決まった数ごとにファイルを分け、先に作ったものから消す「リングバッファー」を使うと、ディスクを使い切りません。ping を40回(80個のパケット)送りながら、20個ずつ・最大3ファイルで記録しました。
$ tshark -i s404-c -f icmp -b packets:20 -b files:3 -w ring/s404.pcapng -a duration:5
Capturing on 's404-c'
80 packets captured
$ ls ring/
s404_00003_20261023215729.pcapng
s404_00004_20261023215729.pcapng
s404_00005_20261023215730.pcapng
1・2番めのファイルは自動で消え、最後の3つだけが残りました。画面では「キャプチャオプション」の「出力」タブで同じ設定ができます。分けたファイルは mergecap で1つにまとめられます。
よくあるトラブルと直し方(インターフェースが出ない・権限・Npcap)
この節では、Wireshark が記録できないときに、原因と直し方を探せます。
flowchart TD
A[記録できない] --> B{OS は?}
B -->|Windows| W[Npcap を<br>確かめる]
B -->|Mac| M[ChmodBPF<br>を入れる]
B -->|Linux| L[wireshark<br>グループ]
| 症状 | 主な原因 | 直し方 |
|---|---|---|
| Windows でインターフェースが出ない | Npcap が入っていない・止まっている | 管理者のコマンド プロンプトで sc query npcap。止まっていれば net start npcap。直らなければ npcap.com から入れ直す |
| Mac で記録できない | ChmodBPF が入っていない | .dmg の「Install ChmodBPF.pkg」を開く |
| Linux で「permission」のエラー | 一般ユーザーに記録の権限がない | dpkg-reconfigure wireshark-common で Yes、wireshark グループに入れてログインし直す |
| Wi-Fi で他の端末の通信が見えない | 無線ではふつう自分の通信しか受け取らない | 自分の端末の通信を見る。モニター モードは Npcap の 802.11 の選択肢と対応するアダプターが要る |
| HTTPS の中身が見えない | TLS で暗号化されている | 自分のアプリの通信なら鍵のファイルを使う(HTTPS の節) |
| 画面が重い・固まる | ファイルが大きい | キャプチャフィルターで絞る・リングバッファーで分ける |
Linux で権限が無いときの実物
記録の権限を持たないユーザー(nobody。特別な権限をすべて外した状態)で TShark を動かすと、次のエラーが出ました。メッセージそのものに、直し方が書かれています。
$ tshark -i s404-c -c 1
Capturing on 's404-c'
tshark: You do not have permission to capture on device "s404-c".
(socket: Operation not permitted)
Please check to make sure you have sufficient permissions.
On Debian and Debian derivatives such as Ubuntu, if you have installed Wireshark from a package, try running
sudo dpkg-reconfigure wireshark-common
selecting "<Yes>" in response to the question
Should non-superusers be able to capture packets?
adding yourself to the "wireshark" group by running
sudo usermod -a -G wireshark {your username}
and then logging out and logging back in again.
If you did not install Wireshark from a package, ensure that Dumpcap has the needed CAP_NET_RAW and CAP_NET_ADMIN capabilities by running
sudo setcap cap_net_raw,cap_net_admin=ep {path/to/}dumpcap
and then restarting Wireshark.
0 packets captured
- Wireshark 全体を root(管理者)で動かすより、dumpcap だけに権限を与える形が勧められています。 README.Debian は、これなら高い権限で動くのは dumpcap だけになる、と書いています。
- グループに入れたあとは、ログインし直すまで反映されません。
- 同じユーザーでも
tshark -Dのインターフェースの一覧は表示されました。一覧が出ることと、記録できることは別です。
Windows の Npcap を確かめる
Npcap の公式ガイドに書かれた確かめ方です。管理者のコマンド プロンプトで動かします。
sc query npcap
net start npcap
sc query npcap の出力でドライバーの状態を見て、止まっていれば net start npcap で起動します。Npcap のガイドは、ループバック(自分の PC の中の通信)のアダプターが見つからないときは、BFE(Base Filtering Engine)のサービスを起動してから npcap を起動し直す、とも書いています。
Wireshark・tshark・tcpdumpの違い
この節では、似た3つの道具のどれを使うかが分かります。
3つとも libpcap(Windows は Npcap)でパケットを記録し、pcap の形式でファイルをやり取りできます。違いは、画面があるかと、どこまで解析するかです。
| 比べる点 | Wireshark | TShark | tcpdump |
|---|---|---|---|
| 操作 | 画面(GUI) | コマンド | コマンド |
| 絞り方 | キャプチャフィルター+表示フィルター | 同じ(-f と -Y) |
キャプチャフィルター(BPF)だけ |
| 解析の深さ | プロトコルごとに細かく分解・再送などを判定 | Wireshark と同じ | 主なプロトコルの要約 |
| 統計・追跡 | メニューで | -z で |
なし |
| 向いている場面 | 手元でじっくり読む | サーバーで解析・集計を自動化 | サーバーで素早く記録する |
同じ pcapng のファイルを tcpdump 4.99.4 でも読めました。
$ tcpdump -nr basic.pcapng -c 3
reading from file basic.pcapng, link-type EN10MB (Ethernet), snapshot length 262144
21:54:19.764639 IP 10.104.0.10 > 10.104.0.20: ICMP echo request, id 14172, seq 1, length 64
21:54:19.764655 IP 10.104.0.20 > 10.104.0.10: ICMP echo reply, id 14172, seq 1, length 64
21:54:20.068707 IP 10.104.0.10 > 10.104.0.20: ICMP echo request, id 14172, seq 2, length 64
サーバーで記録し、手元で読む
サーバーで tcpdump -w か tshark -w で保存する
ファイルを手元に持ってくる
Wireshark で開き、表示フィルターと追跡で読む
サーバーでそのまま集計する
tshark -r で表示フィルターをかける
-T fields -e で必要な欄だけ出す
-z で統計を取り、ほかのコマンドに渡す
画面の無いサーバーでは tcpdump か TShark で記録し、ファイルを手元の Wireshark で開くのが、よく使われる組み合わせです。tcpdump のオプションと出力の読み方は、関連記事「tcpdumpの使い方|フィルタ式一覧と出力の読み方」で扱っています。
よくある質問
Q. Wiresharkとは何ですか? A. ネットワークを流れるパケットを記録し、プロトコルごとに分解して表示する無料のソフトウェアです。Windows・macOS・Linux で動き、通信のトラブルの原因探しやプロトコルの学習に使います。
Q. Wiresharkはどこからダウンロードしますか? A. 公式サイト wireshark.org のダウンロードページから入手します。2026年10月23日時点の最新の安定版は 4.6.9 です。Linux はディストリビューションのパッケージから入れます。
Q. Wiresharkを使うのは違法ですか? A. Wireshark を入れて、自分が管理するネットワークで自分の通信を見ることは、ふつうの使い方です。他人の通信を許可なく記録することは避けます。会社では会社の決まりと管理者の許可に従います。
Q. Wiresharkを日本語化するには? A. 「Edit」→「Preferences…」→「Appearance」の「Language」で日本語を選びます。既定の「システム設定を利用」のままなら、OS が日本語のとき日本語で表示されます。
Q. 表示フィルターとキャプチャフィルターの違いは?
A. キャプチャフィルターは記録する前に絞り(例 udp port 53)、表示フィルターは記録したあとに表示を絞ります(例 dns)。書き方が違い、取り違えるとエラーになります。
Q. 特定のIPアドレスだけを表示するには?
A. 表示フィルターに ip.addr == 192.0.2.1 と入れて Enter を押します。送信元だけなら ip.src、宛先だけなら ip.dst です。
Q. インターフェースが表示されないのはなぜですか?
A. Windows では Npcap が入っていないか止まっていることが多く、sc query npcap で確かめます。Mac は ChmodBPF、Linux は記録の権限(wireshark グループ)を確かめます。
Q. HTTPSの通信の中身は見られますか?
A. そのままでは「Application Data」としか見えません。自分のブラウザや curl が SSLKEYLOGFILE で書き出した鍵のファイルを TLS の設定に指定すると、その通信だけ読めます。
Q. 行の色(黒・赤など)は何を意味しますか? A. 「表示」→「色付けルール」で上から最初に一致したルールの色です。黒地に赤い文字は「Bad TCP」で、再送などの異常を Wireshark が見つけた印です。
Q. tsharkとは何ですか?
A. Wireshark のコマンド版です。同じ表示フィルターと解析を使い、-r でファイルを読み、-Y で絞り、-z で統計を出します。画面の無いサーバーでも使えます。
Q. pcapファイルはどう開きますか? A. Wireshark の「ファイル」→「開く」(Ctrl+O)で開きます。tcpdump で保存した .pcap も、Wireshark の .pcapng も開けます。
まとめ
- Wireshark は、パケットを記録して分解して見せる無料のツール。最新の安定版は 4.6.9(2026年10月23日時点)。Windows は Npcap、Mac は ChmodBPF、Linux は wireshark グループの権限が要る。
- 画面は「パケット一覧」「パケット詳細」「パケットバイト列」の3つ。TShark の通常の出力・
-V・-xがそれぞれに当たる。 - 記録の前に絞るのがキャプチャフィルター(
udp port 53)、記録のあとに表示を絞るのが表示フィルター(dns)。取り違えると、その旨のエラーが出た。 - 実物では、3ウェイハンドシェイクの SYN → SYN, ACK → ACK、DNS の NXDOMAIN、平文の HTTP のパスワード、データを捨てたときの
[TCP Retransmission](0.21・0.65・1.48秒)が見えた。 - HTTPS は中身が見えない。自分のアプリの鍵のファイルがあれば、その通信だけ読める。
- 見てよいのは、自分が管理するか許可を得たネットワークの通信だけ。
次に読むとよい記事です。コマンドでの記録は関連記事「tcpdumpの使い方|フィルタ式一覧と出力の読み方」で、TCP と UDP の仕組みは関連記事「ソケットとは|TCPとUDPの違いをPythonの通信とtcpdumpで解説」で扱っています。
参考・出典
確認日はいずれも 2026年10月23日です。
- Wireshark「Download Wireshark」:https://www.wireshark.org/download.html
- Wireshark「Wireshark 4.6.9 Release Notes」:https://www.wireshark.org/docs/relnotes/wireshark-4.6.9.html
- Wireshark User's Guide「Supported Platforms」:https://www.wireshark.org/docs/wsug_html_chunked/ChIntroPlatforms.html
- Wireshark User's Guide「Installing Wireshark under Windows」:https://www.wireshark.org/docs/wsug_html_chunked/ChBuildInstallWinInstall.html
- Wireshark User's Guide「Installing Wireshark under macOS」:https://www.wireshark.org/docs/wsug_html_chunked/ChBuildInstallOSXInstall.html
- Wireshark User's Guide「Installing from packages under UNIX」:https://www.wireshark.org/docs/wsug_html_chunked/ChBuildInstallUnixInstallBins.html
- Wireshark User's Guide「The Main Window」:https://www.wireshark.org/docs/wsug_html_chunked/ChUseMainWindowSection.html
- Wireshark User's Guide「The Filter Toolbar」:https://www.wireshark.org/docs/wsug_html_chunked/ChUseFilterToolbarSection.html
- Wireshark User's Guide「Start Capturing」:https://www.wireshark.org/docs/wsug_html_chunked/ChCapCapturingSection.html
- Wireshark User's Guide「Filtering Packets While Viewing」:https://www.wireshark.org/docs/wsug_html_chunked/ChWorkDisplayFilterSection.html
- Wireshark User's Guide「Building Display Filter Expressions」:https://www.wireshark.org/docs/wsug_html_chunked/ChWorkBuildDisplayFilterSection.html
- Wireshark User's Guide「Filtering while capturing」:https://www.wireshark.org/docs/wsug_html_chunked/ChCapCaptureFilterSection.html
- Wireshark User's Guide「Following Protocol Streams」:https://www.wireshark.org/docs/wsug_html_chunked/ChAdvFollowStreamSection.html
- Wireshark User's Guide「The "Analyze" Menu」:https://www.wireshark.org/docs/wsug_html_chunked/ChUseAnalyzeMenuSection.html
- Wireshark User's Guide「Packet colorization」:https://www.wireshark.org/docs/wsug_html_chunked/ChCustColorizationSection.html
- Wireshark User's Guide「Name Resolution」:https://www.wireshark.org/docs/wsug_html_chunked/ChAdvNameResolutionSection.html
- Wireshark User's Guide「Expert Information」:https://www.wireshark.org/docs/wsug_html_chunked/ChAdvExpert.html
- Wireshark User's Guide「The Statusbar」:https://www.wireshark.org/docs/wsug_html_chunked/ChUseStatusbarSection.html
- Wireshark Wiki「TLS」:https://wiki.wireshark.org/TLS
- Wireshark ソース(release-4.6)日本語翻訳ファイル wireshark_ja_JP.ts:https://github.com/wireshark/wireshark/blob/release-4.6/ui/qt/wireshark_ja_JP.ts
- Wireshark ソース(release-4.6)wireshark_main_window.ui・wireshark_main_window.cpp・main_window_preferences_frame.ui:https://github.com/wireshark/wireshark/tree/release-4.6/ui/qt
- Wireshark ソース(release-4.6)Windows インストーラー wireshark.nsi:https://github.com/wireshark/wireshark/blob/release-4.6/packaging/nsis/wireshark.nsi
- Npcap「Npcap Users' Guide」:https://npcap.com/guide/npcap-users-guide.html
- e-Gov 法令検索「電気通信事業法」第4条:https://laws.e-gov.go.jp/law/359AC0000000086
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Wiresharkの使い方|画面の見方・フィルター早見表を実例で解説」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。