LoginSignup
13
15

More than 5 years have passed since last update.

tcpdumpでHTTPのPOSTメソッドのBodyを確認する

Posted at

あるWebサーバーで送信されるHTTPのPOSTメソッドのBodyに何が設定されているか確認する必要があり、tcpdumpを使ってやってみたのでメモ

参考

環境

  • Amazon Linux AMI 2015.09.2

tcpdumpを使う

ApacheのモジュールでアクセスログにPOSTのBodyを表示されるものもあるらしいですが、今回はtcpdumpを使ってパケットキャプチャをするようにします。

まずtcpdump自体のインストールをします。

sudo yum install tcpdump

次にtcpudumpコマンドを指定して取得したパケットだけキャプチャします

$sudo tcpdump -i eth0 -Z root -C 1 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)' -w post_data
  • -iオプションでキャプチャするネットワークインターフェースを指定
  • -Zオプションで実行ユーザーを指定(指定しないとtcpdumpユーザーで実行しようとしてファイル書き出しができない)
  • -Cオプションでで結果を出力するファイルをMByte単位でファイルをローテートする
  • ``の間でキャプチャする条件を指定。Webサーバーに対するTCPの80ポートのキャプチャを行う。また、
  • -wオプションで結果を出力するファイルを指定

0x504f5354はHTTPヘッダでPOSTメソッドのリクエストを示すことらしいです(後述のおまけ参照)

では上記をWebサーバーで実行させキャプチャを行っている状態で、クライアントからPOSTデータを送ってみましょう

$curl http://52.69.124.73/ -X POST -d "age=1" -d "hoge=10"

データ送信後、キャプチャを停止させてみるとファイルにデータが追記されているのが確認できます。

$tcpdump -r post_data
reading from file post_data, link-type EN10MB (Ethernet)
21:57:50.412781 IP h101-111-248-034.hogefuga.60341 > ip-172-31-27-43.ap-northeast-1.compute.internal.http: Flags [P.], seq 3588214777:3588214938, ack 2341038372, win 4104, options [nop,nop,TS val 838113355 ecr 7283418], length 161

ただこの状態だとPOSTデータは確認できなかったのでデータの解析にはWiresharkを使います

Wiresharkを使って確認する

クライアントPCにWiresharkをインストールします。

WIRESHARK

Webサーバのpost_dataをscpなどでローカルのPCにコピーし、wiresharkで確認します。

Screen Shot 2016-03-04 at 7.19.40 AM.png

するとHTTPのBodyの部分にcurlで指定したPOSTデータが確認できました。

おまけ

tcpdumpのコマンド実行時の「0x504f5354」という数字は何だろうかというのが気になったのでWiresharkでHTTPヘッダを見てみるとRequestメソッドでPOSTを示すのが「0x504f5354」ということのようですね。

Screen Shot 2016-03-05 at 5.35.01 PM.png

同じようにGETメソッドだけ、PUTメソッドだけtcpdumpをとるなどもできそうですね

13
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
15