tcpdumpは、ネットワークを流れるパケットを取り込み、1行ずつ表示したりファイルに保存したりするコマンドです。使い方は「sudo tcpdump -i インターフェース -nn フィルタ」が基本で、保存は-w、読み直しは-rです。結果では「Flags [S]」などの記号で、接続のどこで止まったかが読めます。
この記事でわかること
- tcpdumpの基本の書き方と、よく使うオプション
- host・port・netとand・or・notで絞り込むフィルタの書き方
- Flags [S]・[S.]・[R]など、結果の1行の読み方
- パケットの並び方からつながらない原因を見分ける方法
- 長時間の保存と、Windowsのpktmonでの代わり
一次情報: tcpdump.org「TCPDUMP(1) man page」(参照)/tcpdump.org「PCAP-FILTER(7) man page」(参照)/Microsoft Learn「Packet Monitor (Pktmon)」(参照)/Microsoft Learn「pktmon etl2pcap」(参照)※2026年10月時点
パケットの中身を読む力は、CCNAやネットワークスペシャリストで学ぶ内容とそのままつながります。どの資格をどの順で取ると転職で評価されやすいかは、別の記事で整理しました。
tcpdumpとは?パケットを取り込んで中身を見るコマンド
tcpdumpとは、ネットワークのインターフェースを流れるパケットを取り込み、送信元・宛先・フラグなどを1行ずつ表示するコマンドです。pingやcurlが「結果」を見せる道具なのに対し、tcpdumpは「実際に何が流れたか」をそのまま見せます。
パケットを取り込むには管理者の権限が要るため、Linuxではsudoを付けて打つのが普通です。入っていなければ、RHEL系は「sudo dnf install tcpdump」、Ubuntu・Debian系は「sudo apt install tcpdump」で入れられます。
| 環境 | 道具 | 補足 |
|---|---|---|
| Linux・Mac | tcpdump | 管理者の権限で打つ |
| Windows(標準) | pktmon | 取り込んだ結果をpcapngに変換できる |
| Windows・Mac(画面で見る) | Wireshark | tcpdumpで保存したファイルも開ける |
Windowsのpktmonは、Microsoftの資料によるとOSに最初から入っているパケット監視の道具です。使い方はこの記事の後半で紹介します。
tcpdumpの基本の書き方とよく使うオプション
基本は「sudo tcpdump オプション フィルタ」です。最初に-Dでインターフェースの一覧を出し、-iで取り込む場所を決めます。
sudo tcpdump -D
sudo tcpdump -i eth0 -nn -c 20
sudo tcpdump -i eth0 -nn host 192.0.2.10 and port 443
アドレスは説明用の値です。-c 20は「20個取り込んだら止まる」という意味で、付けなければ、Ctrl+Cを押すまで取り続ける動きです。
| オプション | 意味 | 使う場面 |
|---|---|---|
| -D | 取り込めるインターフェースの一覧 | 名前が分からないとき |
| -i 名前 | 取り込むインターフェース | Linuxはanyで全部 |
| -nn | アドレスもポート番号も名前に変えない | ほぼ毎回付ける |
| -c 数 | その数だけ取り込んで止まる | 画面を流しすぎない |
| -w ファイル | 表示せずファイルに保存 | 後でWiresharkで見る |
| -r ファイル | 保存したファイルを読む | 保存後の絞り込み |
| -v(-vv) | 詳しく表示 | TTLやIPの長さを見たいとき |
| -A/-X | 中身を文字/16進と文字で表示 | HTTPの中身を見るとき |
| -e | MACアドレスも表示 | 同じセグメントの機器の特定 |
| -s 長さ | 1パケットで取り込む長さ | 中身を取りすぎない |
-nを付けないと、tcpdumpはアドレスを名前に引き直そうとして、そのたびにDNSへ問い合わせます。表示が遅れるうえ、自分が出したDNSの通信まで画面に混ざります。-nnは、それに加えてポート番号も「https」などの名前に変えない指定です。
SSHで入ったサーバーでは、自分の通信を外す
SSHでログインしたサーバーで何も絞らずに取ると、tcpdumpの表示そのものがSSHで送られ、その通信がまた表示される、という繰り返しで画面が埋まります。リモートで取るときは、最後に「and not port 22」を足しておくのが定番の書き方です。
sudo tcpdump -i eth0 -nn not port 22
フィルタの書き方|host・port・netとand・or・not
フィルタを付けると、取り込むパケットを条件で絞れます。tcpdumpのフィルタの文法は、pcap-filterという資料にまとまっています。
| 書き方 | 取り込むもの |
|---|---|
| host 192.0.2.10 | そのアドレスが送信元か宛先のもの |
| src host 192.0.2.10/dst host 192.0.2.10 | 送信元だけ/宛先だけ |
| port 443 | そのポート番号を使うもの |
| portrange 8000-8080 | 範囲内のポート番号 |
| net 192.0.2.0/24 | そのネットワークのアドレス |
| tcp/udp/icmp | その種類の通信だけ |
| arp | ARPだけ(同じセグメントの調査) |
条件をつなぐ言葉はand・or・notです。括弧を使うときは、シェルに解釈されないよう全体をシングルクォートで囲みます。
sudo tcpdump -i eth0 -nn 'host 192.0.2.10 and (port 80 or port 443)'
sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn|tcp-rst) != 0'
2行目は、TCPのフラグにSYNかRSTが立ったものだけを取る書き方です。接続の始まりと強制終了だけを拾えるので、大量の通信が流れるサーバーでも、つながらない接続を探しやすくなります。
tcpdumpの結果の見方|1行の読み方とFlags
TCPの接続が始まるときの3行を例に、1行の読み方を見ていきます。
10:15:01.120345 IP 192.0.2.50.51514 > 192.0.2.10.443: Flags [S], seq 1854201021, win 64240, length 0
10:15:01.121102 IP 192.0.2.10.443 > 192.0.2.50.51514: Flags [S.], seq 302112, ack 1854201022, win 65160, length 0
10:15:01.121150 IP 192.0.2.50.51514 > 192.0.2.10.443: Flags [.], ack 1, win 502, length 0
1行は「時刻・種類・送信元.ポート > 宛先.ポート・フラグ・番号・長さ」の順です。アドレスの後ろの「.443」がポート番号で、「>」の向きが通信の向きになります。
| 表示 | 立っているフラグ | 場面 |
|---|---|---|
| [S] | SYN | 接続を始めたい(1通目) |
| [S.] | SYN+ACK | 接続を受け入れた(2通目) |
| [.] | ACK | 受け取った合図。3通目でつながる |
| [P.] | PSH+ACK | データを送っている |
| [F.] | FIN+ACK | 接続を順に閉じる |
| [R]/[R.] | RST | 接続を強制的に断る・切る |
tcpdumpの資料では、フラグはS(SYN)・F(FIN)・P(PSH)・R(RST)などの組み合わせで表し、「.」はACKを意味すると説明されています。[S]→[S.]→[.]の3行がそろえば、TCPの接続は成立していると読めます。
つながらない原因を、パケットの並びで見分ける
tcpdumpが一番役に立つのは、「どちらが悪いか」で話が止まったときです。パケットの並び方は、止まっている場所をそのまま示します。
| 見えたもの | 起きていること | 疑う場所 |
|---|---|---|
| [S]だけが間をあけて何度も出る | 返事が来ず、送り直している | 途中のファイアウォール、経路、相手のアドレス |
| [S]の直後に[R.]が返る | 相手まで届いたが、そのポートで待っていない | サーバーのサービス停止、ポート番号の誤り |
| [S.]は出るのに、次の[.]が出ない | 戻りの通信が送信元に届いていない | 戻り経路、送信元側のファイアウォール |
| つながった後、データの途中で[R.] | 接続後に切られている | アプリ、ロードバランサー、通信を監視する装置 |
| 大きい[P.]だけが何度も送り直される | 大きいパケットだけ届かない | MTU、VPNやトンネルの途中 |
両側で取ると、どこで消えたかが確定する
- 送信元とサーバーの両方で、同じ条件のtcpdumpを同時に取る
- 1送信元で[S]が出ているか出ていなければ、送信元の端末やアプリの問題
- 2サーバーで[S]が見えるか見えなければ、途中の機器で落ちている
- 3サーバーが[S.]を返しているか返していなければ、サーバーの待ち受けかOSのファイアウォール
- 4送信元に[S.]が届いているか届いていなければ、戻りの経路で落ちている
片側だけでは「送ったか」しか分からない。両側の差が、落ちた区間になる。
図:送信元とサーバーの両方で取り、パケットが消えた区間を絞り込む
長時間取るときの保存とローテーション
たまにしか起きない障害を待つときは、画面に出さずファイルに保存し続けます。ディスクを使い切らないよう、-Cと-Wでファイルを回すのが安全です。
sudo tcpdump -i eth0 -nn -w /var/tmp/cap.pcap -C 100 -W 10 host 192.0.2.10
tcpdumpの資料によると、-Cは1ファイルの大きさの上限で、単位は100万バイトです。-Wと組み合わせると、決めた数のファイルを使い回し、古いものから上書きします。この例なら、およそ1GBを超えない範囲で取り続けられます。
| オプション | 意味 |
|---|---|
| -w ファイル | 保存先。拡張子は.pcapを付けておく |
| -C 数 | 1ファイルの上限(単位は100万バイト) |
| -W 数 | 使い回すファイルの数 |
| -G 秒 | 決めた秒数ごとに新しいファイルにする |
| -r ファイル | 保存したものを読み、フィルタで絞り直す |
保存したファイルはWiresharkでも開けます。現場では、サーバーでtcpdumpで取り、手元のWiresharkで読むという分担がよく使われています。
よくある質問
「You don’t have permission to capture on that device」と出ます
パケットを取り込む権限がありません。sudoを付けて打ち直してください。会社のサーバーでsudoが使えない場合は、取り込みを許可されたアカウントかどうかを管理者に確かめてください。
Windowsでtcpdumpのように取るにはどうすればいいですか?
Windowsで標準の道具はpktmonです。管理者のコマンドプロンプトで「pktmon filter add -p 443」のように条件を足し、「pktmon start -c」で開始、「pktmon stop」で止めます。保存された.etlのファイルは「pktmon etl2pcap ファイル名」でpcapngに変換すれば、Wiresharkで開けます。
「packets dropped by kernel」の数が0ではありません
取り込みが追いつかず、一部のパケットを取りこぼしたという表示です。フィルタで対象を絞る、-nnを付けて名前の変換をやめる、画面に出さず-wでファイルに保存する、の順に試すと減らせます。
本番のサーバーでtcpdumpを取っても大丈夫ですか?
取り込みそのものは通信を止めません。ただ、CPUとディスクは使う点を覚えておいてください。暗号化されていない通信なら、パスワードなどの中身も保存される点に注意が要ります。フィルタで対象を絞り、-sで取り込む長さを抑え、所属先のルールに沿って保管と削除まで決めてから取るのが安全です。
-iにanyを指定すると何が変わりますか?
Linuxでは、すべてのインターフェースからまとめて取り込みます。どのインターフェースを通るか分からないときに便利です。ただし取り込む量が一気に増えるので、hostやportのフィルタと組み合わせて使ってください。
まとめ
- tcpdumpは、流れたパケットを1行ずつ見せる。基本は「sudo tcpdump -i 名前 -nn フィルタ」
- フィルタはhost・port・netをand・or・notでつなぐ。SSHで入ったら「not port 22」
- [S]→[S.]→[.]がそろえば接続は成立。[R]は断られた印
- [S]だけの繰り返しは途中、[S]に[R.]はサーバー、[S.]の後が無ければ戻り経路を疑う
- 長時間は-wと-C・-Wで回して保存。Windowsではpktmonが代わりになる
tcpdumpで「どこで消えたか」が分かれば、次はその区間の機器を見る番です。途中の経路ならルーターの経路表、サーバーなら待ち受けのポートやファイアウォールの設定と、確かめる対象が1つに絞れます。
パケットを読んで原因の区間を示せる人は、SES常駐から一段上の職場へ移るときに評価されます。SESから抜け出す転職の進め方を、段階ごとに整理した記事です。
免責事項
※本記事はtcpdumpの公式資料・Microsoftの公式ドキュメントなどの公開情報をもとに整理したものです。コマンドの表示や挙動は、OSやソフトのバージョン・環境によって変わる場合があります。業務で使う環境では、所属先のルールと各製品の最新資料をあわせてご確認ください。

