tcpdump抓取
tcp標識位按每8
位組算,
tcp的標誌位位於第13個
8位組中,如下,第一行一共
32位是
0 - 3個8
位組,第二行是
4-7八位組,第三行是
8-11
八位組,
data offset +reserved
的前四個是第12個
8位組,
reserved
中的後2位+6
個標誌位是第
13個八位組。
以下tcp
報頭
因此第13個八位組結構為
- - + + + + + +前面2
個是保留的,都為
0,後面的
6個根據不同情況有不同值,例如
syn
包 則為
00 0 0 0 0 1 0
這是二進位制轉化為十進位制就是
2因此
tcpdump -ni eth0 tcp[13]==2
就表示syn
包。同理,
syn+ack
包為00 0 1 0 0 1 0
化為十進位制就是
18,因此
tcpdump -ni eth0 tcp[13]==18
表示syn+ack
包。如果想同時抓
syn和
syn+ack
包,則進行
tcp[13]
位值與掩碼進行與運算:
tcp[13] & 2 == 2
此外,還可以利用
tcp[tcpflags]=tcp-syn
這種格式來寫,後面的值可以為
tcp-fin, tcp-syn, tcp-rst, tcppush, tcp-ack, tcp-urg
任意一種。
示例1、列印
tcp會話中的的開始和結束資料報,並且資料報的源或目的不是本地網路上的主機。
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
localnet
, 實際使用時要真正替換成本地網路的名字
2、列印所有源或目的埠是
80,網路層協議為
ipv4
,並且含有資料,而不是
syn,fin
以及ack-only
等不含資料的資料報。
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
ip[2:2]表示整個
ip資料報的長度;
(ip[0]&0xf)<<2)
表示ip
資料報包頭的長度
(ip[0]&0xf
代表包中的
ihl域,而此域的單位為
32bit
,要換算成位元組數需要乘以
4,即左移2);
(tcp[12]&0xf0)>>4
表示tcp
頭的長度,此域的單位也是
32bit
,換算成位元數為
((tcp[12]&0xf0) >> 4)<<2
,即 (tcp[12]&0xf0)>>2)
原文[1]
[2][3]
tcp協議的六個標識位
6個標識位 urg 緊急指標,告訴接收tcp模組緊要指標域指著緊要資料。ack 置1時表示確認號 為合法,為0的時候表示資料段不包含確認資訊,確認號被忽略。psh 置1時請求的資料段在接收方得到後就可直接送到應用程式,而不必等到緩衝區滿時才傳送。rst 置1時重建連線。如果接收到rst位時候,通常發...
Linux使用tcpdump抓取網路資料報示例
tcpdump是linux命令列下常用的的乙個抓包工具,記錄一下平時常用的方式,測試機器系統是ubuntu 12.04。tcpdump的命令格式 tcpdump的引數眾多,通過man tcpdump可以檢視tcpdump的詳細說明,這邊只列一些筆者自己常用的引數 tcpdump i 網絡卡 nnax...
Linux使用tcpdump抓取網路資料報示例
tcpdump是linux命令列下常用的的乙個抓包工具,記錄一下平時常用的方式,測試機器系統是ubuntu 12.04。tcpdump的命令格式 tcpdump的引數眾多,通過man tcpdump可以檢視tcpdump的詳細說明,這邊只列一些筆者自己常用的引數 tcpdump i 網絡卡 nnax...