2021-05-12 14:32:11
抓包分析工具—tcpdump
2020-06-16 16:57:02
tcpdump(dump the traffic on a network)是一款在Unix下一款比較實用的一款用於分析封包的工具,它支援針對網路層、協定、主機、網路或埠的過濾,並提供and、or、not等邏輯語句、布林表示式對報文的報頭匹配,在Linux系統下如果未安裝可以通過yum來安裝,不過要注意的是在使用需要相應的許可權:
對於SunOS 的nit或bpf介面: 要執行tcpdump , 必須有
/dev/nit
或
/dev/bpf
* 的讀存取許可權;
對於Solaris的dlpi: 必須有網路模擬裝置 (network pseudo device), 如
/dev/le
的讀存取許可權;
對於HP-UX的dlpi、IRIX的snoop、Linux: 必須是root, 或者把它安裝成 root 的設定uid 程式;
對於 Ultrix和Digital UNIX: 一旦超級使用者使用promiscuous 操作模式 (promiscuous-mode), 任何使用者 都可以 執行 tcpdump;
對於BSD: 必須有
/dev/bpf
*的讀存取許可權。
而tcpdump的常用選項引數如下:
-A 封包內容以ASCII顯示,通常用來抓取網頁的封包資料.
-a 試著 把 網路和廣播地址轉換成名稱.
-c 監聽封包數,如果沒有帶這個引數tcpdump會不斷的監聽,當收到count報文後退出.
-d 把編譯過的封包編碼轉換成可閱讀的格式,並傾倒到標準輸出.
-ddd 把編譯過的封包編碼轉換成十進位制數位的格式,並傾倒到標準輸出.
-e 顯示資料鏈路層的封包.
-f 用數位顯示網際網路地址.
-F 指定內含表達方式的檔案.
-i 監聽的網路介面.
-l 使用標準輸出列的緩衝區.
-n 不把主機的網路地址轉換成ip
-N 不列出域名.
-O 不將封包編碼最佳化,這個選項只有當你懷疑優化器有bug時才有用.
-p 不讓網路介面進入混雜模式.
-q 快速輸出,僅列出少數的傳輸協定資訊.
-r 從指定的檔案讀取封包資料.
-s 設定每個封包的大小.
-T 強制將表達方式所指定的封包轉譯成設定的封包型別.目前已知的型別有: rpc (遠端過程呼叫 Remote Procedure Call), rtp
(實時應用協定 Real-Time Applications protocol), rtcp (實時應用控制協定 Real-Time Applications control protocol), vat (可視音訊工具
Visual Audio Tool), 和 wb (分散式白板 distributed White Board).
-S 用絕對而非相對數值列出TCP關聯數.
-t 禁止顯示時戳標誌.
-tt 顯示未格式化的時戳標誌.
-
v
詳細顯示指令執行過程. 例如, 顯示IP資料包中的生存週期和服務型別.
-vv 更詳細顯示指令執行過程. 例如,顯示NFS應答報文的附加域.
-w 把封包資料寫入指定的檔案.
-x 以 16進位制數形式顯示每一個報文(去掉鏈路層報頭後).可以顯示較小的完整報文,否則只顯示snaplen個位元組.
expression表示式:
用來選擇要轉儲的資料包.如果沒有指定expression , 就轉儲網路的全部報文.否則, 只轉儲相對expression為邏輯為真的封包報文.
expression 由一個或多個原語(primitive)組成.原語通常由一個標識(
id
,名稱或數位),和標識前面的一個或多個修飾子(qualifier)組成.修飾子有三種不同的型別:
type
型別修飾子指出標識名稱或標識數位代表什麼型別的東西.可以使用的型別有host,net和port.例如,`host foo
', `net128.3'
, `port 20'.如果不指定型別修飾子, 就使用預設的host .
dir
方向修飾子 指出 相對於 標識 的 傳輸方向 (資料是 傳入還是傳出 標識). 可以使用的 方向 有 src, dst, src or dst 和 src and dst.
例如, `src foo
', `dst net 128.3'
, `src or dst port
ftp
-data
'. 如果 不指定 方向修飾子, 就使用 預設的 src or dst . 對於 `null'
鏈路層 (就是說 象 slip 之類的 點到點 協定), 用 inbound 和 outbound 修飾子 指定 所需的 傳輸方向.
proto 協定修飾子 要求 匹配 指定的協定. 可以使用的 協定 有: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp 和 udp.
例如, `ether src foo
', `arp net 128.3'
, `tcp port 21
'. 如果 不指定 協定修飾子, 就使用 所有 符合 型別 的 協定. 例如, `src foo'
指 `(ip 或 arp 或 rarp) src foo
' (注意後者不符合語法), `net bar'
指 `(ip 或 arp 或 rarp) net bar
', `port 53'
指 `(tcp 或 udp)
port 53'.
更複雜的過濾器表示式可以通過 and, or 和 not 連線原語來組建. 例如, `host foo and not port
ftp
and not port
ftp
-data'.
允許的 原語 有:
dst host host
如果報文中IP的目的地址域是host, 則邏輯為真.host既可以是地址,也可以是主機名.
src host host
如果報文中IP的源地址域是host,則邏輯為真.
host host
如果報文中IP的源地址域或者目的地址域是host,則邏輯為真.上面所有的host表示式都可以加上ip,arp,或rarp關鍵字做字首,就象:ip host host
它等價於:
ether proto ip and host host
如果host是擁有多個IP地址的主機名,它的每個地址都會被查驗.
ether dst ehost
如果報文的以太目的地址是ehost,則邏輯為真. Ehost既可以是名字 (
/etc/ethers
裡有), 也可以是數位
ether src ehost
如果報文的以太源地址是ehost,則邏輯為真.
ether host ehost
如果報文的以太源地址或以太目的地址是ehost,則邏輯為真.
gateway host
如果報文把host當做閘道器, 則邏輯為真.
dst net net
如果報文的IP目的地址屬於網路號net,則邏輯為真.
src net net
如果報文的IP源地址屬於網路號net,則邏輯為真.
net net
如果報文的IP源地址或目的地址屬於網路號net, 則邏輯為真.
net net mask mask
如果IP地址匹配指定網路掩碼(netmask)的net,則邏輯為真.本原語可以用src或dst修飾.
net net
/len
如果IP地址匹配指定網路掩碼的net, 則邏輯為真.
dst port port
如果報文是ip
/tcp
或ip
/udp
, 並且目的埠是port, 則邏輯為真.
src port port
如果報文的源埠號是port,則邏輯為真.
port port
如果報文的源埠或目的埠是port,則邏輯為真.
less
length
如果報文的長度小於等於length,則邏輯為真. 它等同於:len <= length.
greater length
如果報文的長度大於等於length,則邏輯為真. 它等同於:len >= length.
ip proto protocol
如果報文是IP資料包, 其內容的協定型別是protocol,則邏輯為真.
ether broadcast
如果報文是以太廣播報文,則邏輯為真.關鍵字ether是可選的.
ip broadcast
如果報文是IP廣播報文,則邏輯為真.Tcpdump檢查全0和全1廣播約定,並且檢查原生的子網掩碼.
ether multicast
如果報文是以太多目傳送報文(multicast),則邏輯為真. 關鍵字ether是可選的.
ip multicast
如果報文是IP多目傳送報文,則邏輯為真.
總之tcpdump的使用還是可以滿足日常的封包分析使用的,如下以下一些例子:
監聽來自eth0網絡卡且通訊協定為ssh(預設22埠)來源於192.168.2.100的封包資料
[root@localhost ~]
# tcpdump -i eth0 -nn 'port 22 and src host 192.168.2.100'
截獲主機192.168.1.100和主機192.168.2.100或192.168.0.100的通訊
[root@localhost ~]
# tcpdump host 192.168.1.100 and (192.168.1.100 or 192.168.0.100)
擷取本機的udp協定的ntp(預設123埠)
[root@localhost ~]
# tcpdump udp port 123
總之,在日常可以使用tcpdump來對各種封包進行分析,在這裡就不做過多的說明,需要更多tcpdump的使用可以看相關的man幫助手冊,當然是用tcpdump對七層上資料沒有做比較徹底的解碼,所以平時也可把抓取的封包寫入檔案後使用wireshark來進行進一步的分析
本文永久更新連結地址:http://www.linuxidc.com/Linux/2018-01/150038.htm
相關文章