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

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

More than 3 years have passed since last update.

ある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をとるなどもできそうですね

toshihirock
こちらは個人の意見で会社とは関係ありません。お約束です。
http://toshihirock.blogspot.jp/
Why not register and get more from Qiita?
  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