HTTPでアクセスした時のリクエスヘッダーの内容を確認する方法について。

基本

対象URLへのリクエストヘッダーを確認するコマンドは以下のようになります。

sudo tcpdump -nn -X 'dst host [対象URL] and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

"(((ip[2:2] ... >>2)) != 0"は、データが存在するパケットの条件指定を行っていて、各部分は以下のようになっています。

"ip[2:2]" IPパケットサイズ
"ip[0]&0xf)<<2" IPヘッダーサイズ
"tcp[12]&0xf0)>>2" TCPヘッダーサイズ
そのため、"(((ip[2:2] ... >>2)) != 0" は、以下のようになります。
(IPパケットサイズ - IPヘッダーサイズ - TCPヘッダーサイズ) != 0

参考

例 curlでwww.example.com にアクセスした場合

$ sudo tcpdump -nn -X 'dst host www.example.com and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
00:01:23.066687 IP 172.19.163.122.43726 > 93.184.215.14.80: Flags [P.], seq 1663572917:1663572996, ack 1593700403, win 502, options [nop,nop,TS val 857995325 ecr 4211526563], length 79: HTTP: GET / HTTP/1.1
        0x0000:  4500 0083 4b59 4000 4006 6ac7 ac13 a37a  E...KY@.@.j....z
        0x0010:  5db8 d70e aace 0050 6328 1bb5 5efd f033  ]......Pc(..^..3
        0x0020:  8018 01f6 84ca 0000 0101 080a 3323 f83d  ............3#.=
        0x0030:  fb06 cba3 4745 5420 2f20 4854 5450 2f31  ....GET./.HTTP/1
        0x0040:  2e31 0d0a 486f 7374 3a20 7777 772e 6578  .1..Host:.www.ex
        0x0050:  616d 706c 652e 636f 6d0d 0a55 7365 722d  ample.com..User-
        0x0060:  4167 656e 743a 2063 7572 6c2f 372e 3831  Agent:.curl/7.81
        0x0070:  2e30 0d0a 4163 6365 7074 3a20 2a2f 2a0d  .0..Accept:.*/*.
        0x0080:  0a0d 0a                                  ...
上記よりリクエストヘッダーは以下のようになっていることが分かります。
Host: www example com
User-Agent: curl/7.81.0
Accept: */*