hexダンプ形式のHTTPリクエスト
ネットワークトラフィックからキャプチャされたHTTPリクエストが16進数でどのように見えるかを学びます。生のhexパケットデータでメソッド、ヘッダー、ボディ境界を識別します。
Hex
47 45 54 20 2F 20 48 54 54 50 2F 31 2E 31 0D 0A
ASCII
GET / HTTP/1.1\r\n
詳細な説明
HTTPはテキストベースのプロトコルです。つまり、HTTPリクエストのすべてのコンポーネント — メソッド、URL、ヘッダー、テキストボディ — はASCII文字で構成されています。hexエディタやパケットキャプチャで表示すると、HTTPトラフィックはASCIIカラムで読み取れると同時に、バイトレベルで分析できます。
最小限のHTTP GETリクエストのhex表現:
47 45 54 20 2F 20 48 54 54 50 2F 31 2E 31 0D 0A GET / HTTP/1.1..
48 6F 73 74 3A 20 65 78 61 6D 70 6C 65 2E 63 6F Host: example.co
6D 0D 0A 0D 0A m....
リクエスト行のバイトごとの内訳:
| Hex | ASCII | コンポーネント |
|---|---|---|
47 45 54 |
GET | HTTPメソッド |
20 |
(スペース) | セパレータ |
2F |
/ | リクエストURI(ルートパス) |
20 |
(スペース) | セパレータ |
48 54 54 50 2F 31 2E 31 |
HTTP/1.1 | プロトコルバージョン |
0D 0A |
\r\n | CRLF行ターミネータ |
hexでのHTTPメソッドの識別:
各HTTPメソッドには特徴的なhexパターンがあります:
47 45 54— GET50 4F 53 54— POST50 55 54— PUT44 45 4C 45 54 45— DELETE48 45 41 44— HEAD4F 50 54 49 4F 4E 53— OPTIONS50 41 54 43 48— PATCH
ヘッダー/ボディ境界:
HTTPのhexダンプで認識すべき最も重要なパターンは、ヘッダーとボディを区切るダブルCRLF: 0D 0A 0D 0A(4バイト)です。このシーケンスの前がすべてヘッダー、後がすべてメッセージボディです。長いパケットキャプチャでは、この4バイトパターンを検索するのがレスポンスコンテンツの開始位置を見つける最速の方法です。
Content-LengthとTransfer-Encoding:
ダブルCRLF境界の後、ボディの長さは以下のいずれかで決定されます:
Content-Lengthヘッダー(正確なバイト数を指定)- チャンクドトランスファーエンコーディング(各チャンクはASCIIでのhexサイズで始まり、CRLFが続く)
チャンクドエンコーディングでは、31 46 46 0D 0Aのようなパターンが見られます。これはASCIIの"1FF\r\n"で、次の511バイトがボディデータのチャンクであることを意味します。
HTTPSと暗号化トラフィック:
接続がTLS/HTTPSを使用している場合、hexダンプにはTLSハンドシェイク(TLS ClientHelloの16 03 01で始まる)が表示され、その後にランダムに見えるバイトの暗号化されたアプリケーションデータが続きます。実際のHTTPコンテンツを表示するには、復号のためのTLSセッションキーが必要か、すでに復号されたポイント(プロキシやローカルループバックなど)でトラフィックをキャプチャする必要があります。
hexでの一般的なヘッダーパターン:
43 6F 6E 74 65 6E 74 2D 54 79 70 65— "Content-Type"43 6F 6E 74 65 6E 74 2D 4C 65 6E 67 74 68— "Content-Length"41 75 74 68 6F 72 69 7A 61 74 69 6F 6E— "Authorization"
hexダンプでこれらのパターンを認識することで、完全なASCIIレンダリングなしにキーヘッダーを素早く識別できます。
ユースケース
セキュリティアナリストやネットワークエンジニアは、プロキシ問題のデバッグ、Wiresharkでのネットワークキャプチャの分析、生のソケット接続でのAPIエンドポイントのテスト、不審なトラフィックの調査時にHTTPリクエストをhexで調べます。