2021-05-12 14:32:11
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 |
將網絡卡設定為非混雜模式,不能與host或broadcast一起使用 |
-P |
指定要抓取的包是流入還是流出的包。可以給定的值為"in"、"out"和"inout",預設為"inout"。 |
-r |
從指定的檔案中讀取包(這些包一般通過-w選項產生) |
-w |
直接將包寫入檔案中,並不分析和列印出來 |
-T |
將監聽到的包直接解釋為指定的型別的報文,常見的型別有rpc (遠端過程呼叫)和snmp(簡單網路管理協定) |
-X |
需要把協定頭和包內容都原原本本的顯示出來(tcpdump會以16進位制和ASCII的形式顯示),這在進行協定分析時是絕對的利器。 |
-XX |
當分析和列印時, tcpdump 會列印每個包的頭部資料, 同時會以16進位制和ASCII碼形式列印出每個包的資料, 其中包括資料鏈路層的頭部.這對於分析一些新協定的封包很方便. |
相關文章