tcpdump的基本使用

jopen 10年前發布 | 18K 次閱讀 tcpdump 網絡工具包

概述

用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者的定義對網絡上的數據包進行截獲的包分析工具。 tcpdump可以將網絡中傳送的數據包的“頭”完全截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的信息。

命令簡介

tcpdump [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ]
    [ -i 網絡接口 ] [ -r 文件名] [ -s snaplen ]
    [ -T 類《》型 ] [ -w 文件名 ] [表達式 ]

OPTIONS

-A    以ASCII格式打印所有分組
-c    收到count個包后退出
-C    在將包寫入文件前,先檢查文件大小是否超過file_size大小,如果超過則關閉該文件并重新打開新文件
-D    打印出系統中所有可用tcpdump監聽的端口
-e    打印出鏈路層包頭信息
-f    將外部的Internet地址以數字的形式打印出來
-F    從指定文件中讀取表達式,忽略命令行的表達式
-i    監聽的網絡端口,如果沒有指定,則監聽最低號碼的端口。在2.2內核以后,可以使用any參數使tcpdump監聽在所有端口
-n    不把ip地址轉化成名稱
-N    不輸出主機名中的域名部分
-P    不將接口設置成混雜模式
-q    快速輸出,輸出較少的協議信息
-r    在一個文件中讀取包信息(使用-w創建的文件)
-T    將監聽到的包直接解釋為指定的類型的報文
-v    輸出一個詳細的包信息,當使用-w把報文寫入一個文件中時,每10秒報告一次
-vv    輸出更詳細
-vvv    輸出更詳細
-t    不在每一行顯示時間戳
-tt    在每一行中顯示非格式化的時間戳
-ttt    輸出本行和前面一行的時間差
-u    輸出未解碼的NFS句柄
-w   把抓取的包寫入一個文件中,稍后可以使用-r從該文件中讀取包信息,如果把輸出寫入一個文件或者管道中,
輸出會先輸入buffer中,
所以從文件中讀取會有延遲,使用-U標記可以使包信息立刻寫入文件中

表達式是一個正則表達式,tcpdump利用它作為過濾報文的條件,如果一個報文滿足表達式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,則網絡上所有的信息包將會被截獲。在表達式中一般如下幾種類型的關鍵字。

第一種是關于目標類型的關鍵字,主要包括host,net,port, 例如 host 210.27.48.2,指明210.27.48.2是一臺主機,net 202.0.0.0 指明 202.0.0.0是一個網絡地址,port 23 指明端口號是23。如果沒有指定類型,缺省的類型是host.

第二種是確定傳輸方向的關鍵字,主要包括src, dst,dst or src, dst and src,這些關鍵字指明了傳輸的方向。舉例說明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2, dst net 202.0.0.0指明目的網絡地址是202.0.0.0。如果沒有指明方向關鍵字,則缺省是src or dst關鍵字。

第三種是協議的關鍵字,主要包括fddi,ip,arp,rarp,tcp,udp等類型。Fddi指明是在FDDI(分布式光纖數據接口網絡)上的特定的網絡協議,實際上它是"ether"的別名,fddi和ether具有類似的源地址和目的地址,所以可以將fddi協議包當作ether的包進行處理和分析。其他的幾個關鍵字就是指明了監聽的包的協議內容。如果沒有指定任何協議,則tcpdump將會監聽所有協議的信息包。

除了這三種類型的關鍵字之外,其他重要的關鍵字如下:gateway, broadcast,less,greater,還有三種邏輯運算,取非運算是 'not ' '! ', 與運算是'and','&&';或運算 是'or' ,'││';這些關鍵字可以組合起來構成強大的組合條件來滿足人們的需要。

實用命令實例

tcpdump只是一個抓取工具,更重要的是會對抓取的包進行分析。

默認啟動

tcpdump

普通情況下,直接啟動tcpdump將監視第一個網絡接口上所有流過的數據包。

監視指定網絡接口的數據包

tcpdump -i eth1

如果不指定網卡,默認tcpdump只會監視第一個網絡接口,一般是eth0,下面的例子都沒有指定網絡接口。 

監視指定主機的數據包

打印所有進入或離開sundown的數據包.

tcpdump host sundown

也可以指定ip,例如截獲所有210.27.48.1 的主機收到的和發出的所有的數據包

tcpdump host 210.27.48.1

打印helios 與 hot 或者與 ace 之間通信的數據包

tcpdump host helios and \( hot or ace \)

截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通信

tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

打印ace與任何其他主機之間通信的IP 數據包, 但不包括與helios之間的數據包.

tcpdump ip host ace and not helios

如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的ip包,使用命令:

tcpdump ip host 210.27.48.1 and ! 210.27.48.2

截獲主機hostname發送的所有數據

tcpdump -i eth0 src host hostname

監視所有送到主機hostname的數據包

tcpdump -i eth0 dst host hostname

監視指定主機和端口的數據包

如果想要獲取主機210.27.48.1接收或發出的telnet包,使用如下命令

tcpdump tcp port 23 host 210.27.48.1

對本機的udp 123 端口進行監視 123 為ntp的服務端口

tcpdump udp port 123

監聽與制定主機 udp 53 端口的數據包

tcpdump -i eth0 udp port 53 and host 10.1.22.112

監視指定網絡的數據包

打印本地主機與Berkeley網絡上的主機之間的所有通信數據包(nt: ucb-ether, 此處可理解為'Berkeley網絡'的網絡地址,此表達式最原始的含義可表達為: 打印網絡地址為ucb-ether的所有數據包)

tcpdump net ucb-ether

打印所有通過網關snup的ftp數據包(注意, 表達式被單引號括起來了, 這可以防止shell對其中的括號進行錯誤解析)

tcpdump 'gateway snup and (port ftp or ftp-data)'

打印所有源地址或目標地址是本地主機的IP數據包

(如果本地網絡通過網關連到了另一網絡, 則另一網絡并不能算作本地網絡.(nt: 此句翻譯曲折,需補充).localnet 實際使用時要真正替換成本地網絡的名字)

tcpdump ip and not net localnet

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!