tcpdump指令功能強大,參數繁多。本篇作一簡單的總結歸納。
tcpdump指令形式:
tcpdump [選項] [過濾規則]
選項包括-i -x 等,主要用來滿足不同的顯示需要
過濾規則:用於過濾目的,截留特定的數據包,使網絡分析更加精準簡便。
tcpdump的過濾規則表達式還可以指定邏輯運算關鍵字:包括非運算not (或!),與運算(and &&) ,
或運算(or ||)
通常都是需要用這些邏輯關鍵字來組合不同類型的規則表達式的。
下面直接通過例子來講解:
tcpdump -i eth1 -x -s0 host 123.23.0.46 and port 4545 and tcp | more
---選項
-i:指定網卡端口
如果要抓的包源地址和目的地址都是本機,要用-i lo
-x: 可以列出十六進制以及ASCII的封包內容。默認情況下是不會顯示封包內容的。
-s0:完整顯示包的內容。默認情況下tcpdump只顯示96個字節的包內容。
其實-s是tcpdump的一個選項,-s snaplen 可以將顯示的包長度設爲snaplen
tcpdump支持的選項還有很多,此處不一一列舉。
---規則表達式
host:
指定類型:說明123.23.0.46是一臺主機。另外net也是用來指定類型的。
src 或dst:
指明源地址or目的地址,可以使用組合 dst or src, dst and src。
缺省是dst or src
port:
指定端口號
tcp:指定抓取包的協議,當然,你也可以指定udp 等其他協議
以上代表了tcpdump支持的四種規則類型。不同類型的規則可以使用邏輯關鍵字連接。
另外,補充一個很有用的選項功能。
-F filename:
從filename裏面讀取規則表達式。指令中的規則表達式會被忽略。
這樣,你就可以將規則寫在filename裏面保存下來了。
tcpdump還可以抓取特定包內容的數據包,用法是:
sudo tcpdump -Xlps0 -iany 'ip[35:2]=0x60' and dst port 10928 and 'ip[102:4]=10095530'
注意單引號''裏面的內容,ip[35:2]=0x60表示從ip層第35個字節開始取2個字節,值是0x60
有的同學用-w filename將抓包的結果存到filename裏面。這時要用tcpdump -r filename才能打開,否則會顯示亂碼。其實執行tcpdump的時候用重定向就可以了吧?