Tcpdump的使用

臨時有此需求, 正好找到這邊不錯的文章, 趕快留下來~~

轉載自: Tcpdump的使用

簡易使用法: (為了抓到隱藏在 Code 裡的語法, 直接看port有傳什麼資料進來)

  • sudo tcpdump -nnnX -s 1500 port 3306
  • sudo tcpdump -aXXX port 3306 | grep denied

-s : 抓比較長的 data 做一筆記錄

tcpdump採用命令行方式,它的命令格式為:

tcpdump [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 檔案名 ] [ -i 網路介面 ] [ -r 檔案名] [ -s snaplen ] [ -T 類型 ] [ -w 檔案名 ] [運算式 ]

1. tcpdump的選項介紹

  • -a 將網路位址和廣播地址轉變成名字;
  • -d 將匹配資訊包的代碼以人們能夠理解的彙編格式給出;
  • -dd 將匹配資訊包的代碼以c語言程式段的格式給出;
  • -ddd 將匹配資訊包的代碼以十進位的形式給出;
  • -e 在輸出行列印出資料連結層的頭部資訊;
  • -f 將外部的Internet位址以數位的形式列印出來;
  • -l 使標準輸出變為緩衝行形式;
  • -n 不把網路位址轉換成名字;
  • -t 在輸出的每一行不列印時間戳;
  • -v 輸出一個稍微詳細的資訊,例如在ip包中可以包括ttl和服務類型的資訊;
  • -vv 輸出詳細的報文資訊;
  • -c 在收到指定的包的數目後,tcpdump就會停止;
  • -F 從指定的文件中讀取運算式,忽略其他的運算式;
  • -i 指定監聽的網路介面;
  • -r 從指定的檔中讀取包(這些包一般通過-w選項產生);
  • -w 直接將包寫入檔中,並不分析和列印出來;
  • -T 將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網路管理協定;)

2. tcpdump的運算式介紹

運算式是一個正則運算式,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' ,'||';

這些關鍵字可以組合起來構成強大的組合條件來滿足人們的需要,下面舉幾個例子來說明。

(1) 想要截獲所有210.27.48.1 的主機收到的和發出的所有的資料包:

#tcpdump host 210.27.48.1

(2) 想要截獲主機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)

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

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

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

#tcpdump tcp port 23 and host 210.27.48.1

3. tcpdump 的輸出結果介紹

下面我們介紹幾種典型的tcpdump命令的輸出資訊

(1) 資料連結層頭信息

使用命令#tcpdump --e host ice

ice 是一台裝有linux的主機,她的MAC位址是0:90:27:58:AF:1A

H219是一台裝有SOLARIC的SUN工作站,它的MAC位址是8:0:20:79:5B:46;上一條命令的輸出結果如下所示:

	21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.
	telnet 0:0(0) ack 22535 win 8760 (DF)

分析:21:50:12是顯示的時間, 847509是ID號,eth0 <表示從網路介面eth0 接受該資料包,eth0 >表示從網路周邊設備發送資料包, 8:0:20:79:5b:46是主機H219的MAC位址,它表明是從源位址H219發來的資料包. 0:90:27:58:af:1a是主機ICE的MAC位址,表示該資料包的目的地址是ICE . ip 是表明該資料包是IP資料包,60 是數據包的長度, h219.33357 > ice.telnet 表明該資料包是從主機H219的33357埠發往主機ICE的TELNET(23)埠. ack 22535表明對序列號是222535的包進行回應. win 8760表明發送窗口的大小是8760.

 

(2) ARP包的TCPDUMP輸出資訊

使用命令#tcpdump arp

得到的輸出結果是:

	22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
	22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)

分析: 22:32:42是時間戳, 802509是ID號, eth0 >表明從主機發出該資料包, arp表明是ARP請求包, who-has route tell ice表明是主機ICE請求主機ROUTE的MAC位址。 0:90:27:58:af:1a是主機ICE的MAC位址。

 

(3) TCP包的輸出資訊

用TCPDUMP捕獲的TCP包的一般輸出資訊是:

	src > dst: flags data-seqno ack window urgent options
	src > dst:表明從源位址到目的地址,
	flags是TCP包中的標誌資訊,
	S 是SYN標誌,
	F (FIN),
	P (PUSH),
	R (RST) "." (沒有標記);
	data-seqno是資料包中的資料的順序號,
	ack是下次期望的順序號,
	window是接收緩存的視窗大小,
	urgent表明資料包中是否有緊急指針.
	Options是選項.

 

(4) UDP包的輸出資訊

用TCPDUMP捕獲的UDP包的一般輸出資訊是:

route.port1 > ice.port2: udp lenth

UDP十分簡單,上面的輸出行表明從主機ROUTE的port1埠發出的一個UDP資料包到主機ICE的port2埠,類型是UDP, 包的長度是lenth

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈Tcpdump的使用〉中有 18 則留言

  1. 你介紹的那套軟體是很棒,但都是英文的,都看不懂,希望大大可以教我
    1.我是要測連接到中山大學時的封包留量和一些其它的數據
    2.丟出封包,然後偵測它
    中山大學的網址
    http://www.nsysu.edu.tw
    140.117.11.112
    希望大大可以教我,謝謝

  2. 我不太懂您要的東西到底是什麼耶??
    您要的是要抓 web page size?
    從一般電腦出去的封包流量跟 web page size 應該是不會差多少.
    您要不要講清楚要做的事情, 或許有些更簡單的方法來解決?

  3. 今天偶然看見這篇,試了一下,發現運算式介紹的第四個範例
    tcpdump tcp port 23 host 210.27.48.1
    應該是
    tcpdump tcp port 23 and host 210.27.48.1
    這樣才對吧? 因為用您介紹的方式會 syntax error

  4. 你好~
    利用tcpdump -w dump.log 將輸出的東西存到檔案中,但是用wordpad打開卻是亂碼?
    請問要怎麼看檔案的內容啊??

  5. 您好...
    小弟想針對特定所擷取到的某一種封包...並將封包內的幾個欄位資訊存到資料庫(要進行封包比對作業)...
    想請教前輩您...不知道在進行封包擷取的時候,除了利用過濾條件指定要擷取的特定封包外...是否可以同時下條件指定我要的欄位資訊即可..其它的資訊不要出現..
    因為小弟要寫入幾個欄位資訊到資料庫時,因為短時間內擷取的封包數量太多...為了寫入資料庫的效能能夠提升...想說是否可以直接指定特定的封包擷取外、同時指定只呈現特定的結構欄位資訊..
    由於小弟對於這塊領域不是很熟悉...不知道這樣的詢問方式是否前輩您能明白...在此先感謝您的協助與幫忙...!!

  6. sudo tcpdump –i 這指令會去執行指定監聽的網路介面 我想知道他的程式寫法
    我從他的主程式裡看不到 所以想請問他是指向哪一隻程式分支

小信豬 發表迴響取消回覆

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料