tcpdump 強大的功能和靈活的策略,主要體現在過濾器(BPF)強大的表達式組合能力。
本節主要分享一些常見的所謂高級用法,希望讀者能夠舉一反三,根據自己實際需求,來靈活使用它。
1. 抓取指定客戶端訪問 ssh 的數據包
$tcpdump-nieth0src192.168.1.100anddstport22
2. 抓取從某個網段來,到某個網段去的流量
$tcpdump-nieth0srcnet192.168.1.0/16anddstnet10.0.0.0/8or172.16.0.0/16
3. 抓取來自某個主機,發往非 ssh 端口的流量
$tcpdump-nieth0src10.0.2.4andnotdstport22
4. 當構建復雜查詢的時候,你可能需要使用引號,單引號告訴 tcpdump 忽略特定的特殊字符,這里的 ()
就是特殊符號,如果不用引號的話,就需要使用轉義字符
$tcpdump-nieth0
'src10.0.2.4and(dstport3389or22)'
5. 基于包大小進行篩選,如果你正在查看特定的包大小,可以使用這個參數
小于等于 64 字節:
$tcpdump-niless64
大于等于 64 字節:
$tcpdump-nieth0greater64
等于 64 字節:
$tcpdump-nieth0length==64
6. 過濾 TCP 特殊標記的數據包
抓取某主機發送的 RST
數據包:
$tcpdump-nieth0srchost192.168.1.100and
'tcp[tcpflags]&(tcp-rst)!=0'
抓取某主機發送的 SYN
數據包:
$tcpdump-nieth0srchost192.168.1.100and
'tcp[tcpflags]&(tcp-syn)!=0'
抓取某主機發送的 FIN
數據包:
$tcpdump-nieth0srchost192.168.1.100and
'tcp[tcpflags]&(tcp-fin)!=0'
抓取 TCP 連接中的 SYN
或 FIN
包
$tcpdump
'tcp[tcpflags]&(tcp-syn|tcp-fin)!=0'
$tcpdump
'icmp[icmptype]!=icmp-echoandicmp[icmptype]!=icmp-echoreply'
8. 抓取端口是 80,網絡層協議為 IPv4, 并且含有數據,而不是 SYN、FIN 以及 ACK 等不含數據的數據包
$tcpdump
'tcpport80and(((ip[2:2]-((ip[0]&0xf)<<2))?-?((tcp[12]&0xf0)>>2))!=0)'
解釋一下這個復雜的表達式,具體含義就是,整個 IP 數據包長度減去 IP 頭長度,再減去 TCP 頭的長度,結果不為 0,就表示數據包有 data
,如果還不是很理解,需要自行補一下 tcp/ip
協議
9. 抓取 HTTP 報文,0x4754
是 GET
前兩字符的值,0x4854
是 HTTP
前兩個字符的值
$tcpdump-nieth0
'tcp[20:2]=0x4745ortcp[20:2]=0x4854'
-
嵌入式
+關注
關注
5090文章
19176瀏覽量
306922 -
Linux
+關注
關注
87文章
11342瀏覽量
210152 -
網絡
+關注
關注
14文章
7597瀏覽量
89112 -
數據包
+關注
關注
0文章
267瀏覽量
24443
發布評論請先 登錄
相關推薦
評論