Help us understand the problem. What is going on with this article?

超絶初心者むけtcpdumpの使い方

More than 3 years have passed since last update.

Software Design 2014年8月号の後藤大地さんの記事を読んだメモを残しておきます。普通に書くとまんまコピーになるので、自分がよく使うであろうコマンドを主に載せています。詳しくかつちゃんと知りたい人はSoftware Designを読みましょうw

0.tcpdumpとは

tcpdumpとはネットワーク通信の生のデータをキャプチャし、その結果を出力してくれるキャプチャツールです。

Linuxだとディストリのパッケージ管理ソフトでわりとさくっと入ると思います(無責任w)。実際には導入していませんが、WindowsでもWinDumpというtcpdumpライクなツールがあります。Mac OS X 10.9.4 では最初から入っているようです。

1.tcpdumpコマンドの使い方

1.1.とにかく実行してみる

次のコマンドでとりあえずtcpdumpを実行できます。

sudo tcpdump

これで、すべてのインターフェースの通信をキャプチャすることになります。

通信の内容をASCIIで見たい場合には次のようにします。

sudo tcpdump -A

1.2.オプションの指定

tcpdumpはオプションで色々動作を変えることができます。
代表的なオプションは下記の通りです。

オプション 意味
-i [interface] インターフェースを指定してキャプチャ
-w [filename] [filename]で指定したファイルにキャプチャ結果を書き出す
-r [filename] tcpdumpでとったキャプチャ結果を読み込む
-A キャプチャデータをASCIIで表示
-p 自ホスト宛以外のデータはキャプチャしない(非プロミスキャスモード)

よく使うコマンドを下記に記載しておきます。

  • インターフェースを指定して実行
tcpdump -i [interface name]
  • ファイルに書き出す
tcpdump -w dumpfile

1.3.フィルタ指定

大量に流れているパケットの中で特定ホストの特定ポートだけパケットをキャプチャしたいという要求があると思います。もちろんtcpdumpにはパケットフィルタの機能があります。

条件として指定できるものにtype, dir, protoの3つがあります。詳しくはman 7 pcap-filterを見て書きましょう(丸投げ)。

よく使う条件式は次のようなものがあります。

  • 送信元ipアドレスを指定
tcpdump src host [src_ip]
  • 送信先ipアドレスを指定
tcpdump dst host [dst_ip]
  • 送信元もしくは送信先にipアドレスを指定
tcpdump host [target_ip]
  • 送信元ipアドレスレンジを指定
tcpdump src net [src_net] mask [net_mask]
  • 送信先ipアドレスレンジを指定
tcpdump dst net [dst_net] mask [net_mask]
  • 送信元もしくは送信先にipアドレスレンジを指定
tcpdump net [target_net] mask [net_mask]
  • 送信元のポート番号を指定
tcpdump src port [port_num]
  • 送信先のポート番号を指定
tcpdump dst port [port_num]
  • 送信先もしくは送信元のポート番号を指定
tcpdump port [port_num]

条件をandやorで組み合わせることもできます。

  • 特定IPアドレスの80番ポートに関するトラフィックを見る
tcpdump port 80 and host 192.168.0.100

2.実際にやってみる

ここではwebサーバに存在しないページにアクセスしてみます。サーバ側でsudo tcpdump -A -i eth1 port 80をしたあと、クライアント側でwget vagrant_cent/nekoを打鍵します。-Aオプションを指定することでどんなデータが流れているのかうかがい知れます。


  • tcpdumpの結果(抜粋)

〜省略〜
16:23:41.987654 IP 192.168.33.1.63395 > 192.168.33.10.http: Flags [P.], seq 1:118, ack 1, win 8235, options [nop,nop,TS val 582463335 ecr 17636722], length 117
E....y@.@..y..!...!
...P....$${l.. +.......
"..g.^M.rGET /neko HTTP/1.1
User-Agent: Wget/1.14 (darwin13.0.0)
Accept: /
Host: vagrant_cent
Connection: Keep-Alive

〜省略〜
16:23:41.994497 IP 192.168.33.10.http > 192.168.33.1.63395: Flags [P.], seq 1:785, ack 118, win 227, options [nop,nop,TS val 17636729 ecr 582463335], length 784
E..Df @.@..8..!
..!..P..$${l...............
.y"..gHTTP/1.1 404 Not Found
Date: Sat, 26 Jul 2014 07:23:41 GMT
Server: Apache/2.2.15 (CentOS)
X-Request-Id: 9b38104208ce3ff9e34479de251aff52
X-Runtime: 0.003236
X-Rack-Cache: miss
X-Powered-By: Phusion Passenger 4.0.43
Content-Length: 457
Status: 404 Not Found
Connection: close
Content-Type: text/html; charset=utf-8

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Redmine 404 error
<style>
body {font-family: Trebuchet MS, Georgia, "Times New Roman", serif; color: #303030; margin: 10px;}
h1 {font-size:1.5em;}
p {font-size:0.8em;}
</style>
</head>
<body>
<h1>Page not found
<p>The page you were trying to access doesn't exist or has been removed.</p>
<p><a href="javascript:history.back()">Back</a></p>
</body>
</html>


3.WireSharkでdump結果を確認する

-wで取得したキャプチャファイルをWireSharkでオープンすれば、WireSharkで解析することが可能です。

4.おまけ

2.で実施したキャプチャデータをCloud Sharkというキャプチャデータ共有サイトに載せておきます。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away