參考資料:http://www.reibang.com/p/3cca9a74927c
<<親測可用tcpdump查看HTTP流量查看>>
抓包HTTP GET請求:
[root@hostname /]# sudo tcpdump -i eth1?-s 0 -A?'tcp dst port 80 and tcp[((tcp[12:1]?& 0xf0)?>> 2):4]?= 0x47455420'
抓包HTTP POST請求:
[root@hostname /]# sudo tcpdump -i eth1?-s 0 -A?'tcp dst port 80 and (tcp[((tcp[12:1]?& 0xf0)?>> 2):4]?= 0x504f5354)'
查看HTTP請求響應(yīng)頭以及數(shù)據(jù):
[root@hostname /]# sudo tcpdump -i eth1 -A?-s 0 'tcp port 80 and (((ip[2:2]?-?((ip[0]&0xf)<<2))?-?((tcp[12]&0xf0)>>2))?!= 0)'
可對比16進制:
[root@hostname /]# sudo tcpdump -i eth1?-X -s 0 'tcp port 80 and (((ip[2:2]?-?((ip[0]&0xf)<<2))?-?((tcp[12]&0xf0)>>2))?!= 0)'
==================其他資料======================
基本語法
1.?簡單用法:tcpdump -i eth0 -s 0 tcp port 8080 -w?/root/log.cap
2.?過濾從本機的8070端口出渐夸、入的所有?“HT”開頭或“PO”、“GE”?開頭的數(shù)據(jù)包
tcpdump??-XvvennSs 0 -i eth1 '((tcp[20:2]=0x4745 or tcp[20:2]=0x4854 or tcp[20:2]=0x504f) or (port 8070))'?-w /root/log.cap
(注: 0x4745 為"GET"前兩個字母"GE",0x4854?為"HTTP"前兩個字母"HT", 0x504f為"POST"前綴"PO"。)
========
過濾主機
--------
-?抓取所有經(jīng)過 eth1揖铜,目的或源地址是 192.168.1.1 的網(wǎng)絡(luò)數(shù)據(jù)
# tcpdump -i eth1 host 192.168.1.1?
-?源地址
# tcpdump -i eth1 src host 192.168.1.1?
-?目的地址
# tcpdump -i eth1 dst host 192.168.1.1?
過濾端口
--------
-?抓取所有經(jīng)過 eth1川梅,目的或源端口是 25 的網(wǎng)絡(luò)數(shù)據(jù)
# tcpdump -i eth1 port 25?
-?源端口
# tcpdump -i eth1 src port 25?
-?目的端口
# tcpdump -i eth1 dst port 25網(wǎng)絡(luò)過濾
--------
# tcpdump -i eth1 net 192.168?
# tcpdump -i eth1 src net 192.168?
# tcpdump -i eth1 dst net 192.168?
協(xié)議過濾
--------
# tcpdump -i eth1 arp?
# tcpdump -i eth1 ip?
# tcpdump -i eth1 tcp?
# tcpdump -i eth1 udp?
# tcpdump -i eth1 icmp?
常用表達式
----------
非?:?! or "not"?(去掉雙引號)
且?:?&& or "and"
或?:?|| or "or"
-?抓取所有經(jīng)過 eth1舀锨,目的地址是 192.168.1.254 或 192.168.1.200 端口是 80 的 TCP 數(shù)據(jù)
# tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host?
192.168.1.200)))'
-?抓取所有經(jīng)過 eth1,目標 MAC 地址是 00:01:02:03:04:05 的 ICMP 數(shù)據(jù)
# tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
-?抓取所有經(jīng)過 eth1遵蚜,目的網(wǎng)絡(luò)是 192.168,但目的主機不是 192.168.1.200 的 TCP 數(shù)據(jù)
# tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
-?只抓 SYN 包
# tcpdump -i eth1 'tcp[tcpflags]?= tcp-syn'
-?抓 SYN, ACK
# tcpdump -i eth1 'tcp[tcpflags]?& tcp-syn != 0 and tcp[tcpflags]?& tcp-ack != 0'
抓 SMTP 數(shù)據(jù)
----------
# tcpdump -i eth1 '((port 25) and (tcp[(tcp[12]>>2):4]?= 0x4d41494c))'
抓取數(shù)據(jù)區(qū)開始為"MAIL"的包奈惑,"MAIL"的十六進制為 0x4d41494c吭净。
抓 HTTP GET 數(shù)據(jù)
--------------
# tcpdump -i eth1 'tcp[(tcp[12]>>2):4]?= 0x47455420'
"GET "的十六進制是 47455420
抓 SSH 返回
---------
# tcpdump -i eth1 'tcp[(tcp[12]>>2):4]?= 0x5353482D'
"SSH-"的十六進制是 0x5353482D
# tcpdump -i eth1 '(tcp[(tcp[12]>>2):4]?= 0x5353482D) and (tcp[((tcp[12]>>2)+4):2]
= 0x312E)'抓老版本的 SSH 返回信息,如"SSH-1.99.."
-?抓 DNS 請求數(shù)據(jù)
# tcpdump -i eth1 udp dst port 53
其他
----
-c 參數(shù)對于運維人員來說也比較常用肴甸,因為流量比較大的服務(wù)器寂殉,靠人工 CTRL+C 還是
抓的太多,于是可以用-c 參數(shù)指定抓多少個包原在。
# time tcpdump -nn?-i eth0 'tcp[tcpflags]?= tcp-syn'?-c 10000 >?/dev/null
上面的命令計算抓 10000 個 SYN 包花費多少時間友扰,可以判斷訪問量大概是多少彤叉。
實時抓取端口號8000的GET包,然后寫入GET.log
tcpdump -i eth0 '((port 8000) and (tcp[(tcp[12]>>2):4]=0x47455420))'?-nnAl?-w?/tmp/GET.log