6張圖表 + 1個案例 帶你入門tcpdump的使用和原理

一、tcpdump簡介

tcpdump是什麼?

來看看 tcpdump官網怎麼說:This is the home web site of tcpdump, a powerful command-line packet analyzer; and libpcap, a portable C/C++ library for network traffic capture.

不妨來看看chatGPT插件怎麼說?

tcpdump是一種網絡抓包工具,它能夠捕獲網絡數據包並將其分析和顯示出來。它支持多種協議,包括TCP、UDP、ICMP等,並能夠根據不同的過濾條件進行數據包的篩選和分析。tcpdump是一個非常強大的工具,可以用於網絡故障排除、網絡安全分析等方面。

二、tcpdump使用入門

2.1 tcpdump命令使用

tcpdump的使用方法比較簡單,也就是:

tcpdump [選項] [過濾表達式]

選項和表達式的外面都加了中括號,表明它們都是可選的。

tcpdump 提供了大量的選項以及各式各樣的過濾表達式。不過只需要掌握一些常用選項和過濾表達式,就可以滿足日常使用需要了。下面是一些最常見的用法:

2.2 tcpdump輸出結果分析

tcpdump 的基本輸出格式爲:
時間戳 協議 源地址.源端口 > 目的地址.目的端口 網絡包詳細信息

“時間戳 協議 源地址.源端口 > 目的地址.目的端口”就是字面意思,一眼看懂。

網絡包詳細信息包括:

  • Falgs:TCP的標誌位信息
  • seq:序列號,範圍是0 - 2^32-1
  • win:窗口大小
  • options:選項

不知道你發現沒有,這些信息和TCP報文頭部的結構是一一對應呢?

輸出結果中的Flags信息使用的是簡寫,補充一張Flags具體說明:

三、tcpdump抓包實戰

本案例是使用tcpdump抓包TCP三次握手和四次揮手的過程。這個案例不需要苛刻複雜的實驗環境,不需要雲服務器,不需要虛擬機,只要有一臺電腦,不管是Windows還是MacOS,只要配置了簡單的開發環境,就可以進行實戰了。

3.1 抓包過程

1.在本地啓動一個Spring Boot工程,提供一個測試連接:http://localhost:8080/hello

2、打開一個控制檯窗口(窗口1),開啓tcpdump抓包,命令如下:

sudo tcpdump tcp -i lo0 port 8080 -S -nn -t

具體含義:過濾TCP協議,抓取回環包,過濾端口8080,絕對數值,不解析IP地址和端口號名稱,不顯示時間

3、再打開一個控制檯窗口(窗口2),訪問測試連接,命令如下:

curl 127.0.0.1:8080/hello

4、在窗口1中可以看到抓包的內容顯示:

3.2 抓包分析

從上述抓包結果,可以清晰看到TCP建立連接、數據傳輸、斷開連接的過程。

可以對照着回顧下“三次握手”、“四次揮手”的過程,相信一定會加深印象的。

四、tcpdump原理淺析

圖片源自:tcpdump官網的文章libpcap: An Architecture and Optimization Methodology for Packet Capture

tcpdump 抓包其實是使用操作系統底層提供的 libpacp 機制和相關係統調用實現的。Pcap是計算機網絡管理領域中一個用於捕獲網絡流量的應用程序接口(API)。tcpdump 的工作過程是:在收發包時,使用 libpcap 庫來訪問網絡接口和解析數據包;將符合規則(通過BPF filter設置)的數據包拷貝一份到 tcpdump 的內核緩衝區,然後以 PACKET_MMAP 的方式將這部分內存映射到 tcpdump 用戶空間,在用戶空間進行解析和分析,就可以輸出到終端或者保存到文件中了。

通過上圖可以看到,在收包的時候,如果網絡包已經被網卡丟棄了,那麼 tcpdump 是抓不到它的;在發包的時候,如果網絡包在協議棧裏被丟棄了,比如因爲發送緩衝區滿而被丟棄,tcpdump 同樣抓不到它。那麼, tcpdump 的能力範圍簡單地總結爲:網卡以內的問題可以交給 tcpdump 來處理;對於網卡以外(包括網卡上)的問題,tcpdump 就無能爲力了。這個時候,需要在對端也使用 tcpdump 來抓包。

tcpdump是一款簡單好用的命令行抓包工具,希望本文的分享對各位有用!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章