tcpdump出来的数据为原始数据,tcp的就是二进制,http的内容通常也是gzip压缩的,所以,通过是通过tcpdump进行抓包,然后再使用wireshark图形工具怎么分析。
基本命令使用为:
tcpdump -i eth0 -s 0 -n -w /tmp/tcpdump.cap
-s 0 表示不限制包大小,默认是只抓取包的前68个字节,-n 表示不把主机的网络地址转换成名字,-w 表示结果输出到目标文件。
抓取GET请求:
tcpdump -i eth0 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' -n -s 0 -w /tmp/test.cap
抓取POST请求:
tcpdump -i eth0 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354' -n -s 0 -w /tmp/test.cap
一个tcp包的结构如下:
其中IP表头结构:
首部长度以32bit为单位,所以IP表头长度计算公式为:(ip[0] & 0xf) << 2
TCP表头结构:
因为首部长度是以32bit为单位的,所以首部长度即为:((tcp[12] & 0xf0) >> 4) << 2,而0x47455420为'GET ',0x504f5354为'POST',所以GET和POST的抓包命令就如上那样了。
如下命令表示,抓取来源或者目标端口为80,IPv4结构,且非SYN,FIN以及ACK-only等不含数据的数据包:
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'