tcpdumpの使い方|フィルタの書き方と結果の見方

tcpdumpの使い方

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」で入れられます。

パケットを取り込む道具(OS別)
環境道具補足
Linux・Mactcpdump管理者の権限で打つ
Windows(標準)pktmon取り込んだ結果をpcapngに変換できる
Windows・Mac(画面で見る)Wiresharktcpdumpで保存したファイルも開ける

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を押すまで取り続ける動きです。

tcpdumpのよく使うオプション
オプション意味使う場面
-D取り込めるインターフェースの一覧名前が分からないとき
-i 名前取り込むインターフェースLinuxはanyで全部
-nnアドレスもポート番号も名前に変えないほぼ毎回付ける
-c 数その数だけ取り込んで止まる画面を流しすぎない
-w ファイル表示せずファイルに保存後でWiresharkで見る
-r ファイル保存したファイルを読む保存後の絞り込み
-v(-vv)詳しく表示TTLやIPの長さを見たいとき
-A/-X中身を文字/16進と文字で表示HTTPの中身を見るとき
-eMACアドレスも表示同じセグメントの機器の特定
-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その種類の通信だけ
arpARPだけ(同じセグメントの調査)

条件をつなぐ言葉は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」がポート番号で、「>」の向きが通信の向きになります。

tcpdumpのFlagsの記号と意味
表示立っているフラグ場面
[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から抜け出す転職の進め方を、段階ごとに整理した記事です。

SESを抜け出す転職の進め方を見る


免責事項

※本記事はtcpdumpの公式資料・Microsoftの公式ドキュメントなどの公開情報をもとに整理したものです。コマンドの表示や挙動は、OSやソフトのバージョン・環境によって変わる場合があります。業務で使う環境では、所属先のルールと各製品の最新資料をあわせてご確認ください。


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Tanabeです。新卒でSIerに入り、ネットワークの設計から構築、運用保守、クラウド移行まで10年やってきました。その間に転職を3回、CCNPも取りました。

正直に言うと、資格を取っても年収はすぐには上がりませんでした。1回目の転職は失敗、2回目でようやく150万円上がり、3回目で今の事業会社に落ち着いた。動いてみて分かったのは、資格の有無より「現場で何を任されてきたか」で評価が決まる、ということです。

エージェントの言葉を鵜呑みにして、危うく後悔しかけた経験もあります。だからこそ、自分がやらかした失敗をそのまま書いて、同じ回り道をしなくて済むように残しています。転職を考え始めた人が、条件で損をしないための材料にしてもらえたら嬉しいです。

目次