tcpdump 和 wireshark 抓包工具 ,介紹、安裝、命令使用。 詳解三次握手、四次揮手。兩個結合使用,會更好分析報文

馮insist發表於2020-10-29

前言

  • 一般的前後端聯調是用不到抓包的,可以通過postman、chrome的開發者工具進行除錯,檢視請求和相應。
  • 當做資料對接,或者再做幾個服務連線的時候,中間會有restful或者thirft請求,這個時候之只能通過抓包來看請求和相應了。
  • 抓包 其實就是:將網路傳輸傳送接收的資料包進行截獲、重發、編輯、轉存等操作,也用來檢查網路安全。抓包也經常被用來進行資料擷取等。
  • 這裡的包就是資料包,也就是TCP/IP協議通訊傳輸中的資料單位,一般也稱“資料包”

補充:TCP/IP協議是工作在OSI模型第三層(網路層)、第四層(傳輸層)上的,幀工作在第二層(資料鏈路層)。上一層的內容由下一層的內容來傳輸,所以在區域網中,“包”是包含在“幀”裡的。

一、tcpdump 工具

1、tcpdump 工具

Tcpdump提供了一整套完善的規則來對截獲的資料包進 行過濾,由於大多數影像化的嗅探器都使用類似的過濾機制,因此對Linux網路管理員來說,瞭解如何使用Tcpdump來捕獲感興趣的資料包是一項必須掌控的基本功。

2、下載

可到 官網: http://www.tcpdump.org 下載最新的Tcpdump原始碼包。

注意:

因tcpdump的執行需要pcap的支援,所以最好先行安裝pcap軟體包,另外還要注意軟體的版本問題,建議按照網站上匹配的軟體包tcpdump和pcap一同下載。
在這裡插入圖片描述
前期在測試時我使用的yum 安裝的pcap包(版本1.9.1),然後在網上下載了tcpdump(版本為4.9.3)。
此處使用的作業系統是 CentOS release 5.5 (Final)

3、編譯安裝

在編譯Tcpdump之前,應先確定pcap庫(libpcap)已安裝完畢。這個庫是編譯Tcpdump時所必需的。
安裝過程非常簡單如下示:

tar -zxvf libpcap-1.9.1.tar.gz 
cd libpcap-1.3.0
./configure
make 
make install

該庫已安裝完畢,下面執行下面的命令來編譯並安裝Tcpdump:

tar -zxvf tcpdump-4.9.3.tar.gz 
cd tcpdump-4.3.0
 ./configure
make
make install

二、抓包命令選項

Tcpdump是個命令列方式的 網路嗅探器。他通過使用命令選項來過濾網路卡截獲的資料包,假如不進行過濾,過多數量的包會使網路管理員很難理清頭緒。Tcpdump的命令格式如下:

這個就可以直接使用:

tcpdump -s 0 -i any host ip -w 路徑 -v

tcpdump常用引數

-n 顯示IP地址和埠號
-v 顯示更多資訊,ttl,長度,其他選項等,tcpdump的詳細資訊有3個級別,因此-vvv顯示最多資訊
-D 列出可以抓包的網路介面
-i + 網路介面抓包
-c + 數字 一次抓取多少資料包後停止抓取
-w + 檔名 抓包結果儲存到檔案
-r + 檔名 讀取抓包檔案
-s + 數字 抓包的大小
如:tcpdump -nvvv -i any -c 100

tcpdump的過濾器引數

協議名,如icmp,過濾出icmp的制定報文
host + ip 特定主機,抓取目標地址和源地址為特定ip的資料包
port + 數字 特定埠抓包
src + [host] ip 源地址
dst + [host] ip 目標地址
多條件選擇使用and,or和小括號,在shell中需要用引號包含多個條件的過濾規則如, tcpdump -nvvv -i any -c 20 ‘port 80 or port 443’
-X 以十六進位制列印出資料包文
-A 列印資料包文的ASCII值

抓包之後,需要對報文進行分析。如果用wireshark 進行分析的話,就特別清晰明瞭

三、wireshark工具

  • wireshark 也可以進行抓包,這是一個window上面的一個應用。一般是再本地進行抓包。然後對報文進行視覺化分析。

  • 而我一般則是在Linux上使用 tcpdump 進行抓報文,抓取報文之後,再使用 wireshark 進行分析報文。這樣可以準確看到再TCP/IP協議中的 請求 和 響應 情況。

1. 概念介紹

提取特徵時,要對session(會話)進行過濾,找到關鍵的stream,這裡總結了wireshark過濾的基本語法,供自己以後參考。(腦子記不住東西)

wireshark進行過濾時,按照過濾的語法可分為協議過濾內容過濾

對標準協議,既支援粗粒度的過濾如HTTP,也支援細粒度的、依據協議屬性值進行的過濾如tcp.port= =53、http.request.method==“GET”。

對內容的過濾,既支援深度的字串匹配過濾如http contains “Server”,也支援特定偏移處值的匹配過濾如tcp[20:3] == 47:45:54。

2. 兩種過濾

捕捉過濾器(CaptureFilters):用於決定將什麼樣的資訊記錄在捕捉結果中。
顯示過濾器(DisplayFilters):用於在捕捉結果中進行詳細查詢。

  • 捕捉過濾器在抓抱前進行設定,決定抓取怎樣的資料;顯示過濾器用於過濾抓包資料,方便stream的追蹤和排查。
  • 捕捉過濾器僅支援協議過濾,顯示過濾器既支援協議過濾也支援內容過濾。
  • 兩種過濾器它們支援的過濾語法並不一樣。

四、下載、安裝使用

下載官網:https://www.wireshark.org/download.html
在這裡插入圖片描述

六、三次握手、四次揮手詳解

解讀 報文時 ,看著 一行行的程式碼有點懵逼。 仔細看了一下,大體還是能瞭解的,比如No、Time、Source、Destination、Protocol、Length 欄位 還是可以明白的,但是 Info 資訊,就直接懵逼了,看不懂,百度了一下,是資料 TCP 協議的 三次握手、四次揮手的知識,那這裡需要學習一下了。

1. flags欄位(記住)

首先,在TCP層,有個FLAGS欄位,這個欄位有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG.

其中,對於我們日常的分析有用的就是前面的五個欄位。這裡一定要記住

  1. SYN表示建立連線,
  2. FIN表示關閉連線,
  3. ACK表示響應,
  4. PSH表示有 DATA資料傳輸,
  5. RST表示連線重置。

分析:

  • 其中,ACK是可能與SYN,FIN等同時使用的,比如SYN和ACK可能同時為1,它表示的就是建立連線之後的響應,
  • 如果只是單個的一個SYN,它表示的只是建立連線。
  • TCP的幾次握手就是通過這樣的ACK表現出來的。
  • 但SYN與FIN是不會同時為1的,因為前者表示的是建立連線,而後者表示的是斷開連線。
  • RST一般是在FIN之後才會出現為1的情況,表示的是連線重置。
  • 一般地,當出現FIN包或RST包時,我們便認為客戶端與伺服器端斷開了連線;而當出現SYN和SYN+ACK包時,我們認為客戶端與伺服器建立了一個連線。
  • PSH為1的情況,一般只出現在 DATA內容不為0的包中,也就是說PSH為1表示的是有真正的TCP資料包內容被傳遞。
  • TCP的連線建立和連線關閉,都是通過請求-響應的模式完成的。

2. 三次握手

TCP(Transmission Control Protocol)傳輸控制協議TCP是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立一個連線:

位碼tcp標誌位,有6種標示
SYN(synchronous建立聯機)
ACK(acknowledgement 確認)
PSH(push傳送)
FIN(finish結束)
RST(reset重置)
URG(urgent緊急)
Sequence number(順序號碼)
Acknowledge number(確認號碼)

TCP連線三次握手 示意圖:
在這裡插入圖片描述
圖文分析:

  • 第一步:客戶端主動開啟,傳送連線請求報文段,將SYN標識位置為1,Sequence Number置為x(TCP規定SYN=1時不能攜帶資料,x為隨機產生的一個值),然後進入SYN_SEND狀態;
    伺服器 由SYN=1知道,A要求建立聯機

  • 第二步:伺服器收到SYN報文段進行確認,將SYN標識位置為1,ACK置為1,Sequence Number置為y,Acknowledgment Number置為x+1,然後進入SYN_RECV狀態,這個狀態被稱為半連線狀態

  • 第三步:客戶端再進行一次確認,將ACK置為1(此時不用SYN),Sequence Number置為x+1,Acknowledgment Number置為y+1發向伺服器,最後客戶端與伺服器都進入ESTABLISHED狀態。
    主機B收到後確認 seq=x+1 與ACK=1則連線建立成功。

完成三次握手,主機A與主機B開始傳送資料。

3. 四次揮手

TCP三次握手是TCP連線建立的過程,TCP四次揮手則是TCP連線釋放的過程。

TCP四次揮手的流程圖:
在這裡插入圖片描述
當客戶端沒有資料再需要傳送給服務端時,就需要釋放客戶端的連線,這整個過程為:

  • 第一步:客戶端傳送一個報文給服務端(沒有資料),其中FIN設定為1,Sequence Number置為u,客戶端進入FIN_WAIT_1狀態

  • 第二步:服務端收到來自客戶端的請求,傳送一個ACK給客戶端,Acknowledge置為u+1,同時傳送Sequence Number為v,服務端年進入CLOSE_WAIT狀態

  • 第三步:服務端傳送一個FIN給客戶端,ACK置為1,Sequence置為w,Acknowledge置為u+1,用來關閉服務端到客戶端的資料傳送,服務端進入LAST_ACK狀態

  • 第四步:客戶端收到FIN後,進入TIME_WAIT狀態,接著傳送一個ACK給服務端,Acknowledge置為w+1,Sequence Number置為u+1,最後客戶端和服務端都進入CLOSED狀態

五、wireshark 詳解分析 pcap報文檔案

從第四章學習了 三次握手和四次揮手,主要學習這兩個階段的流程和其中的欄位。
接下來就分析用wireshark開啟的報文協議。
先開啟 編輯->查詢分組,就會出現一個過濾器:
在這裡插入圖片描述

  • 第一處紅框:就是 過濾協議 的地方,
  • 第二處紅框:就是準確過濾的地方。
  • 第三處紅框:就是報文協議的詳細資訊,從欄位名稱就可以知道其意思,最應該關注的是 最右邊的 info 資訊

我按IP地址過濾後
ip.address=

相關文章