首頁 > 軟體

tcpdump的使用以及引數詳解

2020-06-16 16:33:32

平時分析用戶端和伺服器網路互動的問題時,很多情況下需要在用戶端和伺服器抓包分析報文。

一般win下抓包使用WireShark即可,但是linux下就需要用到tcpdump了,下面是一些對於tcpdump的使用說明。

tcpdump可以將網路傳送的封包的"頭"截獲下來提供分析。

它支援針對網路層,協定,主機,網路或埠的過濾,並提供and,or,not等邏輯語句幫助你過濾無用資訊。

一. 基本使用

關鍵字使型別:

第一種是關於型別的關鍵字,主要包括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將會監聽所有協定的資訊包。

•預設

tcpdump

監視第一個網路節點上流過的所有封包。

•監視指定網路介面

tcpdump -i eth1

•監視指定主機的封包

tcpdump host cas1

監視所有來自或去往cas1的包

tcpdump host 10.10.10.1

當然也可以指定IP

tcpdump -i eth0  src host cas1

截獲主機cas1傳送的所有資料

tcpdump -i eth0 dst host  cas1

監視所有傳送到主機cas1的資料

•指定埠

tcpdump tcp port 23  and host  cas1

獲取和主機cas1互動的所有telnet包

tcpdump udp port 123

監視本機UDP的ntp伺服器端口

tcpdump -i eth0  -vnn src host 10.10.10.122  and not port 22

抓取源ip是10.10.10.122且埠不是22的封包

tcpdump -i eth0  -vnn ( src host  10.10.10.2  and dst port 22 ) or ( src host 10.10.10.65 and dst port 80  )

tcpdump -i eth0  -vnn 'src host 10.10.10.2 and dst port 22' or ' src host 10.10.10.65 and dst port 80 '

抓取源ip是10.10.10.2且目的埠是22,或源ip是10.10.10.65且目的埠是80的封包。

•指定網段

tcpdump -i eth0 -vnn net  10.10.10.0/24

抓取包含10.10.10.0網段的封包

抓取icmp協定的封包

tcpdump -i eth0  -vnn icmp

•抓取報文儲存到檔案

tcpdump –i eth0  -vnn -w /tmp/fil1  -c 100

把抓取的封包記錄存到/tmp/fill檔案中,當抓取100個封包後就退出程式。

tcpdump –i eth0  -vnn -r  /tmp/fil1  tcp

從/tmp/fill記錄中讀取tcp協定的封包

tcpdump –i eth0  -vnn -r /tmp/fil1  host  10.10.10.58

從/tmp/fill記錄中讀取包含10.10.10.58的封包

二. 引數詳解:

-a

將網路地址和廣播地址轉變成名字

-d

將匹配資訊包的程式碼以人們能夠理解的組合格式給出

-dd

將匹配資訊包的程式碼以c語言程式段的格式給出

-ddd

將匹配資訊包的程式碼以十進位制的形式給出

-e

在輸出行列印出資料鏈路層的頭部資訊,包括源mac和目的mac,以及網路層的協定

-f

將外部的Internet地址以數位的形式列印出來

-l

使標準輸出變為緩衝行形式

-n

指定將每個監聽到封包中的域名轉換成IP地址後顯示,不把網路地址轉換成名字

-nn

指定將每個監聽到的封包中的域名轉換成IP埠從應用名稱轉換成埠號後顯示

-t

在輸出的每一行不列印時間戳

-v

輸出一個稍微詳細的資訊,例如在ip包中可以包括ttl和服務型別的資訊

-vv

輸出詳細的報文資訊

-c

在收到指定的包的數目後,tcpdump就會停止

-F

從指定的檔案中讀取表示式,忽略其它的表示式

-i

指定監聽的網路介面

-p

將網絡卡設定為非混雜模式,不能與hostbroadcast一起使用

-P

指定要抓取的包是流入還是流出的包。可以給定的值為"in""out""inout",預設為"inout"

-r

從指定的檔案中讀取包(這些包一般通過-w選項產生)

-w

直接將包寫入檔案中,並不分析和列印出來

-T

將監聽到的包直接解釋為指定的型別的報文,常見的型別有rpc (遠端過程呼叫)和snmp(簡單網路管理協定)

-X

需要把協定頭和包內容都原原本本的顯示出來(tcpdump會以16進位制和ASCII的形式顯示),這在進行協定分析時是絕對的利器。

-XX

當分析和列印時, tcpdump 會列印每個包的頭部資料, 同時會以16進位制和ASCII碼形式列印出每個包的資料, 其中包括資料鏈路層的頭部.這對於分析一些新協定的封包很方便.


IT145.com E-mail:sddin#qq.com