1. 程式人生 > >tcpdump命令詳解

tcpdump命令詳解

日常工作中需要對網路傳輸的資料包進行抓取分析。在windows客戶端,通常使用WireShark,但是在Linux/UNIX中,我們通常使用開源的tcpdump工具。該工具可擴充套件,對於網路維護和入侵者都是非常有用。

tcpdump可以將網路中傳輸的資料包“頭”完全截獲下來提供分析。它支援針對網路層、協議、主機、網路或埠的過濾,並提供and/or/not等邏輯語句來幫助使用者去掉無用的資訊。

tcpdump在root使用者下執行。

tcpdump命令使用格式:

tcpdump  [-nn]  [-i  網路介面]  [-w  存檔的檔名]   [-c 次數]   [-Ae][-qX]  [-r 

檔案][所欲擷取的資料內容]

引數:

-nn

擷取的內容中,直接以IP和port number顯示,而非主機名與服務名稱。即不進行埠和名字的轉換。

-i

後面接要監聽的網路介面,如eth0,lo,ppp0等。如果沒有該引數,預設監控第一個網路介面(eth0)。

-w

如果需要將監聽所得的資料包儲存下來,則使用-w 儲存檔名。可以直接將監控的內容輸出到檔案中。

-c

監聽的封包數。即監聽到指定的數量後自動停止命令的執行。否則tcpdump會不斷地監聽,直到使用者輸入Ctrl+C為止。

-A

封包的內容以ASCII顯示,通常用來捕捉www的網頁封包資料。

-e

使用資料鏈路層(OSI第二層)的MAC封包資料來顯示。

-q

僅列出較為簡短的封包資訊,第一行的內容比較精簡。

-X

可以列出十六進位制以及ASCII的封包內容,對於監聽封包內容很有用。

-r

將後面接的檔案中把資料讀出來顯示。那個檔案是由-w儲存的資料。

-vv

輸出詳細的報文資訊到介面中。

-t

不在每一行中輸出時間戳。

-tt

在每一行中輸出非格式化時間戳。

-ttt

輸出本行和前面一行之間的時間差。

-tttt

在每一行中輸出由date處理的預設格式的時間戳。

常用的表示式邏輯字元:

  • 非:!  或 not
  • 且:&& 或 and
  • 或:|| 或 or

常見的例項:

tcpdump -i eth1 host 192.168.1.1

抓取所有經過eth1,目的或源地址是192.168.1.1的網路資料

tcpdump -i eth1 src host 192.168.1.1

抓取所有經過eth1,源地址是192.168.1.1的網路資料

tcpdump -i eth1 dst host 192.168.1.1

抓取所有經過

tcpdump -i eth1 port 22677

tcpdump -i eth1 src port 22677

tcpdump -i eth1 dst port 22677

tcpdump -i eth1 net 192.168

協議過濾

tcpdump -i eth1 arp

tcpdump -i eth1 ip

tcpdump -i eth1 tcp

tcpdump -i eth1 '((tcp) and ((dst net 10.11) and (not dst host 10.11.210.15)))'

抓取所有經過eth1,目的網路是10.11,但是目的主機不是10.11.210.15的TCP資料。

tcpdump -i eth1 '((udp) and (port 22677) and ((dst host 10.11.210.15) or (dst host 10.11.210.18)))'

抓取所有經過eth1,目的主機是10.11.210.15或10.11.210.18,埠是22677的UDP資料。

tcpdump -vv -nn -c 100 -w /home/gateway/TCP%H%M%S.log 'dst host 10.11.210.15'

抓取100個目的地址是10.11.210.15的資料包,生成檔案到/home/gateway目錄下,存檔檔案的名字為TCP+時分秒.log

tcpdump -i eth1 'tcp[tcpflags]=tcp-syn'

只抓取SYN包。