您現在的位置是:首頁 > 棋牌

tcpdump基本操作以及發散介紹(一)

  • 由 騰訊雲遊戲方案 發表于 棋牌
  • 2022-05-30
簡介使用tcpdump抓取網路資料包,是運維工作繞不開的坎,這裡會先簡單介紹一下基本的操作,接著會經由規則部分拓展一下,畢竟我們很多時候在搜尋的時候,會找到各種各樣的表示式,但卻不知道這個是怎麼來的,裡面到底代表著什麼含義,本文將對這一塊重點闡

0x35等於多少

使用tcpdump抓取網路資料包,是

運維工作繞不開

的坎,這裡會先簡單介紹一下基本的操作,接著會經由規則部分拓展一下,畢竟我們很多時候在搜尋的時候,會找到各種各樣的表示式,但卻不知道這個是怎麼來的,裡面到底代表著什麼含義,本文將對這一塊重點闡述,讓大家看完後知其所以然。

首先,介紹一下

tcpdump的基本用法

,這個一般配合wireshark聯合使用,畢竟wireshark可以使用gui,檢視簡單明瞭。

常用的引數如下:

-i 選擇需要抓取的網絡卡

-c 選擇需要抓取的包個數

-w 設定抓包後需要儲存在什麼地方

-n 以數字形式來顯示(這個在cli視窗的時候還是很有用的,他會把埠,主機等那些轉變成數字形式,看起來更直觀)

-x 在cli視窗可以看到包對應的十六進位制內容(用的少)

下面舉一些例子:

抓取eth0網絡卡上的100個包並將結果儲存在/tmp/eth0。pcap

tcpdump -i eth0 -c 100 -w /tmp/eth0。pcap

接著把/tmp/eth0。pcap放入到wireshark即可詳細檢視裡面的內容了。

基本的介紹就這樣結束了,至於一些更豐富的,可以檢視man,根據需要再使用。

下面說的是根據特定的規則來精確抓取需要的資料。這些規則我們在搜尋的時候可以查到,例如port 22,這種還好理解,就是抓取埠號為22的,還有一些看起來很難理解的,例如,官方上舉的例子是關於http的, tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420。一般看到這種是不是就要罵人了,下面就拓展解析下這類的規則,這樣在以後就可以根據自己的需求,自己寫出來了,知其所以然。接下來的篇幅會有點長,我會由淺入深的來解釋。

1。wireshark檢視包檔案,這裡以dns的為例。

tcpdump基本操作以及發散介紹(一)

紅線框住的部分就是一個概覽,可以看到各部分的一個大綱。大家都知道dns是基於udp的,在這框裡的user datagram protocol,都取自首字母后,就是UDP了。現在我們展開udp部分,看看裡面的內容,如下圖:

上半部分是友好的顯示,我們可以看到埠,長度等資訊。下半部分是十六進位制的展示。當我們用滑鼠點選到上半部分時,下半部分就會跟著變化,如下圖:

下面的顏色部分,d8 05就是上面55301代表的部分了。我們可以看到,它使用了兩個十六進位制的數字來代表埠號。再結合上面的表示式,我們反推一下,知道可以用 協議[數字] 來乾點什麼。這個數字指的就是下半部分展示的這些十六進位制,並且他們的下標是從0開始的。也就是說,上面udp[0]的值就是d8,udp[1]的值就是05。

接著介紹[x:y]中,y的含義:

y的意思是在x後包含y位。例如[0:2],這個代表的就是從第0位(也就是第一個)開始,包含2位,這個包含是包括自身的。也就是說,在上面圖例中udp[0:2],就是d8 05。那麼,根據這點我們再來推導一下,如果我們想抓取dns的,規則除了udp外,還可以使用udp,並且udp的目的埠是53來精準篩選。這個規則換成表示式那就是udp[2:2] = 0x0035了。在上面的圖中,很容易看到下兩位就是00 35,因為是十六進位制表示的,所以需要在前面加上0x。結合起來就是0x0035了。udp[2:2],因為下標是從0開始,所以2其實代表的就是第三個數字,也就是從00開始,一共包含2個數,那就是00 35了,結合起來,精確的表達就是udp[2:2] = 0x0035了。這裡用比較容易的dns入手介紹了。接下來再說官網上那個例子。

2.tcp

說到這裡,其實就繞不開要說一下協議。tcp協議,大家都聽說過,但是因為使用場景的問題,我們並不知道這個協議的內容和組成。但是既然要使用這種複雜的表示式,就必須要知道tcp的包結構了。這裡摘抄一個別人部落格的圖片(圖片來源https://blog。csdn。net/caotuo_csdn/article/details/90106916)

這裡需要提前說明的一點就是,圖片上用的是位,8位是一個位元組,在wireshark中下面看到的都是以位元組為單位的。同樣從下圖來看

tcpdump基本操作以及發散介紹(一)

我們可以看到的是,這裡已經展開到了tcp的部分,並且第一個源埠,在下面是用了2個十六進位制來代表,結合最開始的tcp包結構圖,上面是顯示用16位來代表。這個轉換,自己要有意識。再結合tcp包結構圖,可以看到,在tcp包頭之後,接著就是資料部分。也就是說,我們要想根據很明確的特徵來進行篩選,就必須要知道這個tcp頭部是多大了。但是根據組成結構看,這個頭部似乎是20個位元組。但是這個是不夠準確的,注意看就會知道,tcp頭部還包含選項部分,而選項部分很多時候並沒有,在沒有時候,tcp頭部就是20個位元組,如果有的話,就不是了。

那麼問題來了,如果想要精確,就必須要知道tcp頭部大小是多少了,而不是簡單的認為就是20個位元組。我們再回頭看tcp結構那張圖,看到第四行的最前面有 4位首部長度,原來這個裡面已經有了,那麼只要根據這個來不就知道了嘛。

未完待續

Top