1. ホーム
  2. android

[解決済み] tcpdumpでHTTPリクエスト、レスポンスヘッダ、レスポンスボディを取得することは可能ですか?

2023-03-21 06:42:40

質問

私は tcpdump を使って、以下のコマンドを実行して、HTTPデータを取得しています。

sudo tcpdump -A -s 1492 dst port 80

上記のコマンドの結果。

  1. ヘッダー、私はリクエストとレスポンスヘッダを考えます。
  2. 読み取り不可能なデータ。
  3. URL が GET /modules/mod_news_pro_gk1/cache/stories.ilbalad.ajayeb.strange-tractor.jpg .

例えば、読み取り可能なリクエスト > レスポンスヘッダ > レスポンスボディなど、より明確な結果が必要です。 どのように結果をフィルタリングすればよいのでしょうか?

どのように解決するのですか?

HTTP GET と HTTP POST (または両方とメッセージボディ) を対象とした tcpdump フィルタが存在します。

  • 実行 man tcpdump | less -Ip examples を実行して、いくつかの例を見てみましょう。

  • ここでは、HTTP GET 用の tcpdump フィルタ ( GET = 0x47 , 0x45 , 0x54 , 0x20 ):

    sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
    
    
  • ここでは、HTTP POST用のtcpdumpフィルタ( POST = 0x50 , 0x4f , 0x53 , 0x54 ):

    sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
    
    
  • リクエストとレスポンスのヘッダーとメッセージボディを含む HTTP トラフィックを監視する ( ソース ):

    tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
    tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
    
    

TCPヘッダーのビット操作の詳細については、以下を参照してください。 文字列マッチング キャプチャ フィルタ ジェネレータ (Sake Blok氏の説明へのリンク)を参照してください。