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包。 |