tcpdump的使用以及參數詳解


平時分析客戶端和服務器網絡交互的問題時,很多情況下需要在客戶端和服務器抓包分析報文
一般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碼形式打印出每個包的數據, 其中包括數據鏈路層的頭部.這對於分析一些新協議的數據包很方便.

   

   

   

   

   

   

   

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM