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: */*