案例篇:如何用 tcpdump 和 Wireshark 識別潛在威脅
無論是日常瀏覽網頁、觀看視頻,還是企業開展線上業務、進行數據傳輸,都離不開網絡的支持。然而,網絡問題也時有發生,比如網絡卡頓,相信大家都遇到過,那種等待頁面加載的焦急心情,真的讓人抓狂。網絡卡頓不僅影響我們的使用體驗,對於企業來說,還可能導致業務中斷、客戶流失,造成巨大的經濟損失。
那麼,當網絡出現問題時,我們該如何快速找到癥結所在呢?這就輪到 tcpdump 和 Wireshark 這兩款強大的網絡流量分析工具登場啦!它們就像是網絡世界的 “福爾摩斯”,能夠幫助我們深入分析網絡流量,找出問題的根源。tcpdump 是一款基於命令行的網絡抓包工具,它功能強大,能夠在 Linux 系統中輕鬆捕獲網絡數據包,就像一個敏銳的獵手,精準地捕捉網絡中的每一個數據傳輸瞬間。
而 Wireshark 則是一款集抓包與圖形化分析於一體的工具,它提供了直觀的界面和豐富的分析功能,讓我們可以像拆解機器一樣,細緻地剖析數據包的結構和內容 。接下來,就讓我們一起走進這兩款工具的世界,學習如何使用它們來解決網絡問題吧!
一、tcpdump 命令行抓包大師
1.1 tcpdump 初相識
tcpdump 是一款基於命令行的網絡抓包工具,在 Linux 系統中可謂是大名鼎鼎。它就像是一位隱藏在幕後的高手,默默地捕獲網絡中的數據包,爲我們提供網絡通信的詳細信息 。無論是排查網絡故障,還是進行網絡安全分析,tcpdump 都能發揮出巨大的作用。在服務器端,當出現網絡連接異常、數據傳輸緩慢等問題時,tcpdump 能夠幫助我們快速定位問題所在。比如,當服務器突然無法訪問某個特定的網站時,我們可以使用 tcpdump 抓取網絡數據包,查看是否存在丟包、重傳等異常情況,從而判斷是網絡連接問題還是服務器本身的配置問題。
1.2 安裝 tcpdump
如果你使用的是 Debian 或 Ubuntu 系統,安裝 tcpdump 非常簡單,只需在終端中輸入以下命令:
sudo apt-get install tcpdump
如果是 CentOS 或 RHEL 系統,則可以使用 yum 命令來安裝:
sudo yum install tcpdump
安裝完成後,我們就可以開始使用 tcpdump 來探索網絡世界啦!
1.3tcpdump 基本用法
①簡單抓包
直接運行 tcpdump 命令,它會捕獲指定網絡接口的所有流量。例如,在終端中輸入 “tcpdump”,然後按下回車鍵,tcpdump 就會開始工作。它會實時輸出捕獲到的數據包信息,這些信息包括數據包的時間戳、源 IP 地址、目標 IP 地址、協議類型以及數據包的長度等。比如下面這個輸出示例:
10:23:45.123456 IP 192.168.1.100.50000 > 192.168.1.200.80: Flags [S], seq 123456789, win 65535, options [mss 1460], length 0
在這個示例中,“10:23:45.123456” 是數據包的時間戳,表示數據包被捕獲的時間;“IP” 表示協議類型爲 IP 協議;“192.168.1.100.50000” 是源 IP 地址和源端口號;“192.168.1.200.80” 是目標 IP 地址和目標端口號;“Flags [S]” 表示 TCP 標誌位爲 SYN,說明這是一個建立 TCP 連接的請求包;“seq 123456789” 是序列號;“win 65535” 是窗口大小;“options [mss 1460]” 是 TCP 選項,這裏表示最大段大小爲 1460 字節;“length 0” 表示數據包的數據部分長度爲 0。通過這些信息,我們可以初步瞭解網絡通信的情況。
②指定接口抓包
在實際使用中,我們可能只需要捕獲某個特定網絡接口的流量。這時,可以使用 “-i” 選項來指定網絡接口。例如,要捕獲 eth0 接口的流量,只需在終端中輸入以下命令:
sudo tcpdump -i eth0
這裏使用 “sudo” 是因爲 tcpdump 需要管理員權限才能捕獲網絡數據包。執行這個命令後,tcpdump 就會專注於 eth0 接口,只捕獲通過該接口的數據包,這樣可以減少不必要的干擾,讓我們更清晰地分析目標接口的網絡流量。
③過濾特定主機流量
如果我們只關心與某個特定主機相關的流量,可以使用 “host” 關鍵字來過濾。比如,要捕獲與 IP 地址爲 192.168.1.100 的主機之間的通信數據包,可以使用以下命令:
sudo tcpdump host 192.168.1.100
這樣,tcpdump 就只會顯示與 192.168.1.100 這個主機相關的數據包信息,無論是該主機發送的還是接收的數據包都會被捕獲並顯示出來,方便我們對特定主機的網絡活動進行分析。
④過濾特定端口流量
除了過濾特定主機的流量,我們還可以過濾特定端口的流量。使用 “port” 關鍵字,就可以輕鬆實現這一目的。例如,要捕獲所有端口號爲 80 的數據包,可以輸入以下命令:
sudo tcpdump port 80
端口號爲 80 通常是 HTTP 協議使用的端口,通過這個命令,我們可以捕獲到所有與 HTTP 通信相關的數據包,對於分析 Web 服務器的訪問情況、排查 HTTP 相關的網絡問題非常有幫助。
⑤組合過濾條件
tcpdump 還支持使用邏輯運算符 “and”“or”“not” 來組合過濾條件,以實現更復雜的過濾需求。比如,要捕獲源 IP 地址爲 192.168.1.100 且目標端口爲 80 的數據包,可以使用以下命令:
sudo tcpdump src host 192.168.1.100 and dst port 80
這個命令中,“src host 192.168.1.100” 表示源 IP 地址爲 192.168.1.100,“dst port 80” 表示目標端口爲 80,“and” 運算符將這兩個條件組合起來,只有同時滿足這兩個條件的數據包纔會被捕獲。再比如,要捕獲源 IP 地址爲 192.168.1.100 或者目標端口爲 80 的數據包,可以使用 “or” 運算符:
sudo tcpdump src host 192.168.1.100 or dst port 80
而如果要捕獲除了 ICMP 協議之外的所有數據包,可以使用 “not” 運算符:
sudo tcpdump not icmp
通過靈活組合這些過濾條件,我們可以根據實際需求精準地捕獲和分析網絡數據包。
1.4tcpdump 高級用法
①保存捕獲數據包
有時候,我們可能需要將捕獲到的數據包保存下來,以便後續進行更深入的分析。tcpdump 提供了 “-w” 選項來實現這一功能。例如,要將捕獲到的數據包保存到名爲 “capture.pcap” 的文件中,可以使用以下命令:
sudo tcpdump -i eth0 -w capture.pcap
這裏,“-i eth0” 指定了捕獲的網絡接口爲 eth0,“-w capture.pcap” 表示將捕獲到的數據包保存到 “capture.pcap” 文件中。保存後的文件可以使用 Wireshark 等工具進行打開和分析,Wireshark 提供了更直觀的圖形化界面和豐富的分析功能,能夠幫助我們更好地理解數據包的內容和網絡通信的細節。
②從文件讀取數據包
當我們已經保存了數據包文件後,可以使用 “-r” 選項從文件中讀取數據包進行分析。比如,要讀取之前保存的 “capture.pcap” 文件,可以輸入以下命令:
tcpdump -r capture.pcap
執行這個命令後,tcpdump 會讀取 “capture.pcap” 文件中的數據包,並按照默認的格式輸出數據包的信息。這樣,我們就可以在不需要實時捕獲數據包的情況下,對之前保存的數據包進行反覆分析,方便我們研究特定時間段內的網絡通信情況。
③顯示詳細信息
tcpdump 提供了 “-v”“-vv”“-vvv” 等選項來獲取更詳細的數據包信息。“-v” 選項會輸出一個稍微詳細的信息,比如在 IP 包中可以包括 TTL(生存時間)和服務類型的信息。例如:
sudo tcpdump -i eth0 -v
執行這個命令後,輸出的數據包信息會比默認情況下更詳細一些,我們可以看到更多關於數據包的細節,如 TTL 的值、服務類型等,這些信息對於分析網絡路徑和服務質量非常有幫助。
“-vv” 選項會輸出更詳細的報文信息,包括一些 TCP 選項的詳細內容等。例如:
sudo tcpdump -i eth0 -vv
使用 “-vv” 選項後,我們可以看到更多關於 TCP 連接的詳細信息,如 TCP 選項中的最大段大小(MSS)、時間戳選項等,這些信息對於深入分析 TCP 連接的建立和數據傳輸過程非常重要。
“-vvv” 選項則是最詳細的模式,會顯示完整的數據包信息,包括一些更底層的協議細節。例如:
sudo tcpdump -i eth0 -vvv
在 “-vvv” 模式下,我們幾乎可以看到數據包的所有細節,從鏈路層到應用層的信息都會被詳細顯示出來,這對於專業的網絡分析人員來說非常有用,可以幫助他們深入瞭解網絡通信的每一個環節。
④其他實用選項
除了上述選項外,tcpdump 還有一些其他實用的選項。比如 “-c” 選項可以用於限制抓包的數量。例如,要捕獲 10 個數據包後就停止抓包,可以使用以下命令:
sudo tcpdump -i eth0 -c 10
這個命令在我們只需要獲取少量數據包進行分析時非常有用,可以避免不必要的大量數據捕獲,節省時間和存儲空間。
-
“-S” 選項可以用於處理 TCP 關聯數,以絕對序列號代替相對序列號,這在分析一些複雜的 TCP 連接場景時非常有幫助,可以讓我們更清晰地瞭解 TCP 連接中數據包的順序和關係。
-
“-A” 選項可以將數據包的內容以 ASCII 文本形式顯示,這在抓取包含網頁數據的數據包時非常方便,我們可以直接查看數據包中的文本內容,如 HTTP 請求和響應中的文本信息,對於分析 Web 應用的網絡通信非常直觀。
-
“-X” 選項會分別以十六進制和 ASCII 碼格式顯示數據包的內容,這對於分析二進制數據和文本數據混合的數據包非常有用,我們可以同時看到數據包的二進制表示和對應的文本內容,有助於理解數據包的結構和內容。
二、Wireshark 圖形化分析
Wireshark 是一款功能極其強大的圖形化網絡分析工具,在網絡領域有着廣泛的應用 。它就像是一個專業的網絡數據分析師,能夠深入分析網絡數據包,爲我們提供詳細的網絡流量信息。無論是排查網絡故障、進行網絡安全監測,還是研究網絡協議,Wireshark 都能大顯身手。在網絡安全監測中,Wireshark 可以實時捕獲網絡數據包,通過分析數據包的內容和來源,檢測是否存在惡意攻擊行爲,如端口掃描、SQL 注入等。它還可以幫助我們研究網絡協議,通過捕獲和分析不同協議的數據包,深入瞭解協議的工作原理和機制,對於網絡工程師和開發人員來說,這是非常有價值的。
2.1 安裝 Wireshark
⑴Linux 系統安裝
如果你使用的是 Debian 或 Ubuntu 系統,可以在終端中輸入以下命令進行安裝:
sudo apt-get install wireshark
在安裝過程中,系統會提示你確認安裝,輸入 “Y” 並回車即可繼續安裝。安裝完成後,Wireshark 就會被安裝到系統中,你可以通過在終端中輸入 “wireshark” 來啓動它。
對於 CentOS 或 RHEL 系統,則需要使用 yum 命令來安裝:
sudo yum install wireshark
同樣,在安裝過程中按照提示進行確認即可。如果系統提示沒有找到 wireshark 軟件包,可能需要先啓用相應的軟件源。
⑵Windows 系統安裝
在 Windows 系統中安裝 Wireshark 也非常簡單。首先,打開瀏覽器,訪問 Wireshark 官方網站(https://www.wireshark.org/) 。在官網首頁,找到 “Download” 按鈕,點擊進入下載頁面。在下載頁面中,選擇適合你係統的安裝包,一般來說,如果你的系統是 64 位的,就選擇 64 位的安裝包;如果是 32 位的,就選擇 32 位的安裝包。下載完成後,雙擊安裝包開始安裝。
安裝過程中,會出現安裝嚮導界面,按照嚮導的提示一步一步進行操作即可。在安裝過程中,你可以選擇安裝路徑、是否創建桌面快捷方式等選項。安裝完成後,在開始菜單中可以找到 Wireshark 的圖標,點擊即可啓動 Wireshark。
2.2Wireshark 基本操作
① 啓動與界面介紹
-
啓動 Wireshark 後,你會看到一個直觀且功能豐富的界面。界面主要分爲以下幾個區域:
-
菜單欄:包含了各種操作選項,如文件的打開、保存,捕獲的開始、停止,以及各種分析工具和設置選項等。通過菜單欄,我們可以完成大部分的操作,比如打開一個已有的數據包文件進行分析,或者設置捕獲過濾器等。
-
工具欄:提供了常用功能的快捷圖標,方便我們快速進行操作。例如,點擊綠色的鯊魚鰭圖標可以開始捕獲數據包,點擊紅色的正方形圖標可以停止捕獲,還有放大鏡圖標用於查找數據包等。這些快捷圖標讓我們的操作更加高效,不需要在菜單欄中一層一層地查找相應的功能。
-
接口列表:顯示了當前系統中可用的網絡接口,我們可以在這裏選擇要進行抓包的網絡接口。比如,如果你的計算機同時連接了有線網絡和無線網絡,這裏就會顯示兩個對應的網絡接口,你可以根據需要選擇其中一個進行抓包。
-
數據包列表:實時顯示捕獲到的數據包的摘要信息,包括數據包的編號、時間戳、源 IP 地址、目標 IP 地址、協議類型以及簡要信息等。我們可以通過這個列表快速瞭解捕獲到的數據包的基本情況,比如某個數據包是從哪個 IP 地址發送到哪個 IP 地址的,使用的是什麼協議等。
-
數據包詳情:當我們在數據包列表中點擊某個數據包時,這裏會顯示該數據包的詳細信息,包括各層協議的頭部信息和數據內容。通過查看數據包詳情,我們可以深入瞭解數據包的結構和內容,比如一個 HTTP 請求數據包,我們可以在這裏看到請求的方法、URL、頭部信息以及請求體等。
-
十六進制數據:以十六進制和 ASCII 碼的形式顯示數據包的原始數據,幫助我們查看數據包的底層內容。在分析一些特殊的數據包或者進行協議研究時,查看原始數據是非常有幫助的,我們可以通過這裏看到數據包在網絡中實際傳輸的字節數據。
② 選擇網絡接口抓包
要使用 Wireshark 進行抓包,首先需要選擇正確的網絡接口。在 Wireshark 的主界面中,找到 “接口列表” 區域,這裏會列出當前系統中所有可用的網絡接口。每個接口都有一個名稱和對應的描述信息,比如 “Ethernet0” 表示有線網絡接口,“Wi-Fi” 表示無線網絡接口等。
根據你的需求選擇要抓包的網絡接口。如果你想捕獲有線網絡的流量,就選擇對應的有線網絡接口;如果想捕獲無線網絡的流量,就選擇無線網絡接口。選擇好接口後,點擊接口名稱前面的小箭頭,展開該接口的詳細信息,確保沒有其他異常設置。然後,點擊工具欄上的 “開始捕獲” 按鈕(綠色的鯊魚鰭圖標),Wireshark 就會開始捕獲通過該網絡接口的數據包。
③捕獲過濾器使用
捕獲過濾器用於在抓包前設置過濾條件,只捕獲我們感興趣的數據包,這樣可以減少捕獲的數據量,提高分析效率。捕獲過濾器使用的是 Berkeley Packet Filter(BPF)語法,它由類型、方向、協議和邏輯運算符等元素組成。
例如,要捕獲與特定 IP 地址通信的數據包,可以使用 “host” 關鍵字。比如,要捕獲與 IP 地址 192.168.1.100 相關的數據包,可以在捕獲過濾器輸入框中輸入 “host 192.168.1.100”。這裏的 “host” 表示類型爲主機,“192.168.1.100” 是指定的主機 IP 地址。
如果要捕獲特定端口的流量,可以使用 “port” 關鍵字。例如,要捕獲端口號爲 80(HTTP 協議常用端口)的數據包,可以輸入 “port 80”。“port” 表示類型爲端口,“80” 是指定的端口號。
還可以使用邏輯運算符 “and”“or”“not” 來組合多個過濾條件。比如,要捕獲源 IP 地址爲 192.168.1.100 且目標端口爲 80 的數據包,可以輸入 “src host 192.168.1.100 and dst port 80”。這裏的 “src” 表示源,“dst” 表示目標,“and” 表示兩個條件同時滿足。
在設置好捕獲過濾器後,點擊 “開始捕獲” 按鈕,Wireshark 就會按照設置的過濾條件捕獲數據包。
④顯示過濾器使用
顯示過濾器用於在抓包後對捕獲到的數據包進行篩選,只顯示我們關心的數據包。顯示過濾器的語法更加靈活和強大,它可以基於協議、IP 地址、端口號、協議字段等多種條件進行過濾。
例如,要過濾出所有 HTTP 協議的數據包,只需要在顯示過濾器輸入框中輸入 “http”,然後按下回車鍵,數據包列表中就只會顯示 HTTP 協議的數據包。
如果要過濾出源 IP 地址爲 192.168.1.100 的數據包,可以輸入 “ip.src == 192.168.1.100”。這裏的 “ip.src” 表示源 IP 地址,“==” 是比較運算符,表示等於。
要過濾出目標端口爲 80 的 TCP 數據包,可以輸入 “tcp.dstport == 80”。“tcp.dstport” 表示 TCP 協議的目標端口。
顯示過濾器還支持複雜的條件組合。比如,要過濾出源 IP 地址爲 192.168.1.100 且包含 “login” 關鍵字的 HTTP POST 請求數據包,可以輸入 “ip.src == 192.168.1.100 and http.request.method == "POST" and http contains "login"”。這裏使用了 “and” 運算符組合了三個條件,分別是源 IP 地址、HTTP 請求方法和數據包內容。
通過合理使用顯示過濾器,我們可以快速從大量的捕獲數據包中找到我們需要的數據包,進行更深入的分析。
2.3Wireshark 高級分析功能
①協議分析
Wireshark 強大的功能之一就是對各種協議的深入解析和展示。它支持幾乎所有常見的網絡協議,包括 HTTP、TCP、UDP、IP、ARP、ICMP 等等。當我們捕獲到數據包後,Wireshark 會自動識別數據包所使用的協議,並將協議的各個字段詳細地展示出來。
以 HTTP 協議爲例,當我們捕獲到一個 HTTP 請求數據包時,在數據包詳情區域可以看到 HTTP 協議的各個部分。比如,請求行中的請求方法(GET、POST 等)、URL 和 HTTP 版本;頭部信息中的各種字段,如 User - Agent(客戶端信息)、Accept(可接受的內容類型)、Cookie(會話信息)等;如果是 POST 請求,還可以看到請求體中的數據。通過這些信息,我們可以瞭解客戶端的請求內容、客戶端的類型以及可能的用戶行爲等。
對於 TCP 協議,Wireshark 會展示 TCP 連接的建立、數據傳輸和斷開過程中的各種信息。例如,TCP 三次握手過程中的 SYN、SYN + ACK、ACK 標誌位;序列號(Sequence Number)和確認號(Acknowledgment Number),它們用於確保數據的可靠傳輸;窗口大小(Window Size),它表示接收方當前可以接收的數據量,通過分析窗口大小的變化,我們可以瞭解網絡的擁塞情況和數據傳輸的效率。
②統計圖表功能
Wireshark 提供了豐富的統計和圖表功能,幫助我們更直觀地瞭解網絡流量的情況。這些功能可以通過菜單欄中的 “Statistics” 選項來訪問。
-
協議分佈:在 “Statistics” - “Protocol Hierarchy” 中,Wireshark 會展示捕獲到的數據包中各種協議的佔比情況。通過這個功能,我們可以快速瞭解網絡中主要使用的協議類型,判斷是否存在異常的協議流量。比如,如果發現某個不常見的協議佔用了大量的網絡帶寬,就需要進一步分析原因,可能存在安全風險或者網絡配置問題。
-
會話表:選擇 “Statistics” - “Conversations”,可以查看網絡中的會話信息,包括源 IP 地址、目標 IP 地址、使用的協議以及數據包和字節數等。會話表可以幫助我們瞭解不同主機之間的通信情況,分析哪些主機之間的通信量較大,是否存在異常的通信模式。例如,如果發現某個內部主機與外部的一個不常見 IP 地址進行大量的數據傳輸,就需要關注是否存在數據泄露的風險。
-
端口分佈:在 “Statistics” - “Endpoints” 中,Wireshark 會顯示各個端口的使用情況,包括髮送和接收的數據包數量、字節數等。通過分析端口分佈,我們可以瞭解哪些端口被頻繁使用,是否存在端口掃描等異常行爲。比如,如果某個端口在短時間內收到大量來自不同 IP 地址的連接請求,就可能是遭受了端口掃描攻擊。
-
時間序列圖:“Statistics” - “IO Graphs” 可以生成網絡流量的時間序列圖,以可視化的方式展示網絡流量隨時間的變化情況。我們可以在圖中設置不同的參數,如數據包數量、字節數、不同的協議等,通過觀察圖表的變化趨勢,分析網絡流量的高峯和低谷,判斷網絡的負載情況。例如,在業務高峯期,觀察網絡流量是否超出了預期,如果出現網絡擁塞,可以進一步分析原因並採取相應的措施。
③深入分析數據包
在 Wireshark 中,我們可以通過點擊數據包列表中的某個數據包,在數據包詳情區域查看其詳細信息。這個區域會以層次結構的方式展示數據包的各層協議信息,從物理層的數據幀開始,到數據鏈路層的以太網幀,再到網絡層的 IP 包、傳輸層的 TCP 或 UDP 段,最後到應用層的協議數據,如 HTTP 請求或響應。
以一個 HTTP 請求數據包爲例,在數據包詳情區域,我們可以看到:
-
Frame:物理層的數據幀概況,包括幀的長度、捕獲時間、接口 ID 等信息。這些信息對於瞭解數據包在物理傳輸過程中的基本情況非常重要,比如幀長度可以反映數據包的大小,捕獲時間可以幫助我們確定事件發生的順序。
-
Ethernet II:數據鏈路層以太網幀頭部信息,包含源 MAC 地址和目標 MAC 地址。MAC 地址是網絡設備在數據鏈路層的標識,通過查看源和目標 MAC 地址,我們可以瞭解數據包在局域網內的傳輸路徑,判斷是否存在 MAC 地址欺騙等異常情況。
-
Internet Protocol Version 4:網際層 IP 包頭部信息,包括源 IP 地址、目標 IP 地址、TTL(生存時間)、協議類型等。IP 地址是網絡層的關鍵標識,通過源和目標 IP 地址,我們可以確定數據包的發送和接收主機;TTL 值表示數據包在網絡中可以經過的最大跳數,每經過一個路由器,TTL 值減 1,當 TTL 值爲 0 時,數據包將被丟棄,通過分析 TTL 值,我們可以瞭解數據包在網絡中的傳輸路徑和可能遇到的問題。
-
Transmission Control Protocol:傳輸層的數據段頭部信息,對於 HTTP 協議,通常使用 TCP 協議進行傳輸。這裏會顯示源端口和目標端口、序列號、確認號、TCP 標誌位(如 SYN、ACK、FIN 等)。這些信息對於理解 TCP 連接的建立、數據傳輸和斷開過程非常關鍵,比如通過 SYN 和 ACK 標誌位,我們可以分析 TCP 三次握手的過程;通過序列號和確認號,我們可以確保數據的正確傳輸和順序。
-
Hypertext Transfer Protocol:應用層的信息,即 HTTP 協議的具體內容。這裏會顯示 HTTP 請求的方法(GET、POST 等)、URL、HTTP 版本、頭部信息以及請求體(如果有)。通過分析這些信息,我們可以瞭解客戶端的請求內容、客戶端的類型以及可能的用戶行爲等,比如通過請求的 URL,我們可以知道用戶訪問的具體頁面;通過頭部信息中的 User - Agent,我們可以瞭解客戶端使用的瀏覽器類型和操作系統。
此外,在數據包詳情區域,我們還可以右鍵點擊某個字段,選擇 “Follow” - “TCP Stream” 或 “UDP Stream” 來跟蹤該數據包所屬的 TCP 或 UDP 會話,這對於分析連續的網絡通信過程非常有幫助。
三、tcpdump 與 Wireshark 聯手出擊
3.1 聯合使用場景
在實際的網絡分析工作中,tcpdump 和 Wireshark 常常攜手合作,發揮出各自的優勢 。tcpdump 在服務器端的抓包工作中表現出色,它能夠在不依賴圖形界面的情況下,高效地捕獲網絡數據包。而 Wireshark 則憑藉其強大的圖形化分析功能,成爲深入剖析數據包的利器。
例如,當服務器出現網絡性能問題時,我們首先可以使用 tcpdump 在服務器上快速抓取一段時間內的網絡數據包,並將其保存爲文件。由於 tcpdump 基於命令行操作,在服務器環境中佔用資源少,操作便捷,可以在不影響服務器正常運行的情況下完成抓包任務。然後,將保存的數據包文件傳輸到裝有 Wireshark 的分析主機上。Wireshark 的圖形化界面能夠直觀地展示數據包的各種詳細信息,包括協議層次結構、源和目標地址、端口號以及數據包內容等,方便我們進行深入分析。
這種先使用 tcpdump 抓包,再利用 Wireshark 分析的方式,既充分利用了 tcpdump 的抓包靈活性,又發揮了 Wireshark 強大的分析能力,能夠更高效地解決網絡問題。
3.2 聯合使用步驟
①tcpdump 抓包
使用 tcpdump 抓包並保存文件非常簡單。例如,要捕獲 eth0 接口上的所有流量,並將其保存到名爲 “network_traffic.pcap” 的文件中,可以使用以下命令:
sudo tcpdump -i eth0 -w network_traffic.pcap
如果只想捕獲特定主機(如 192.168.1.100)與其他主機之間的通信流量,可以這樣操作:
sudo tcpdump -i eth0 host 192.168.1.100 -w specific_host_traffic.pcap
如果要捕獲特定端口(如端口 80,通常用於 HTTP 通信)的流量,則命令如下:
sudo tcpdump -i eth0 port 80 -w http_traffic.pcap
在實際抓包過程中,我們可以根據具體的分析需求,靈活調整過濾條件,精準地捕獲所需的網絡數據包 。
②Wireshark 分析
將 tcpdump 保存的文件導入 Wireshark 進行分析也很容易。打開 Wireshark 後,點擊菜單欄中的 “文件”,然後選擇 “打開”,在文件瀏覽器中找到 tcpdump 保存的. pcap 文件,如 “network_traffic.pcap”,點擊 “打開” 按鈕即可導入文件 。
文件導入後,我們可以在 Wireshark 的界面中看到捕獲的數據包列表。通過設置顯示過濾器,我們可以對數據包進行篩選和分析。比如,要查看所有 HTTP 協議的數據包,在顯示過濾器輸入框中輸入 “http”,然後按下回車鍵,數據包列表中就只會顯示 HTTP 協議的數據包。如果要查看源 IP 地址爲 192.168.1.100 的數據包,輸入 “ip.src == 192.168.1.100” 即可。我們還可以通過點擊數據包列表中的某個數據包,在數據包詳情區域查看其詳細信息,包括各層協議的頭部信息和數據內容,從而深入分析網絡通信的細節。
3.3 案例實戰
假設我們遇到一個網絡故障,某公司的員工反饋無法正常訪問公司內部的一個重要 Web 應用。我們決定使用 tcpdump 和 Wireshark 來排查問題。
①抓包:首先,在 Web 服務器所在的主機上使用 tcpdump 進行抓包。由於我們懷疑是 Web 應用相關的問題,所以主要捕獲與 Web 服務器端口(假設爲 8080)相關的流量。在終端中輸入以下命令:
sudo tcpdump -i eth0 tcp port 8080 -w web_app_traffic.pcap
讓 tcpdump 運行一段時間,以捕獲足夠多的數據包。在此期間,讓員工不斷嘗試訪問 Web 應用,以便抓取到相關的網絡通信數據。
②設置過濾器:抓包完成後,將 “web_app_traffic.pcap” 文件傳輸到裝有 Wireshark 的分析主機上。打開 Wireshark 並導入該文件。爲了快速定位問題,我們設置顯示過濾器。由於是 Web 應用訪問問題,首先設置過濾器爲 “http”,這樣可以只顯示 HTTP 協議的數據包。然後,進一步篩選出與目標 Web 應用相關的數據包,假設目標 Web 應用的 IP 地址爲 192.168.1.100,添加過濾條件 “ip.addr == 192.168.1.100”,最終的顯示過濾器爲 “http && ip.addr == 192.168.1.100”。
③分析結果:通過設置過濾器後,在數據包列表中查看捕獲的數據包。我們發現,有大量的 HTTP 請求數據包發送到 Web 服務器,但服務器的響應數據包很少,並且存在一些 TCP 重傳的數據包。進一步查看 TCP 重傳數據包的詳細信息,發現是因爲服務器在發送響應數據包時,某些數據包丟失,導致客戶端沒有收到完整的響應,從而觸發了 TCP 重傳機制。
④問題原因和解決方案:經過進一步排查,發現是服務器所在的網絡交換機出現了故障,部分端口存在丟包現象。更換交換機後,再次讓員工訪問 Web 應用,使用 tcpdump 和 Wireshark 進行抓包分析,發現網絡通信恢復正常,HTTP 請求和響應數據包都能正常傳輸。通過這個案例,我們可以看到 tcpdump 和 Wireshark 在網絡故障排查中的強大作用,它們能夠幫助我們深入瞭解網絡通信的細節,快速找到問題的根源並解決問題。
四、避坑指南與注意事項
4.1 權限問題
在使用 tcpdump 時,通常需要 root 權限。這是因爲 tcpdump 需要將網絡界面設置爲混雜模式,以捕獲所有經過網絡接口的數據包,而普通用戶沒有權限進行這樣的操作 。如果沒有足夠的權限,運行 tcpdump 時會出現 “tcpdump: no suitable device found” 等錯誤提示。解決方法很簡單,只需在執行 tcpdump 命令時使用 sudo,獲取管理員權限,如 “sudo tcpdump -i eth0” 。
對於 Wireshark,在 Windows 系統中,默認情況下需要以管理員身份運行才能捕獲數據包。如果沒有管理員權限,可能無法選擇某些網絡接口進行抓包,或者在抓包過程中出現權限不足的錯誤。在 Linux 系統中,同樣可能需要爲用戶授予適當的權限,比如將用戶添加到 wireshark 組中,並設置相關文件的權限,以允許用戶運行 Wireshark 進行抓包操作 。
4.2 性能影響
在高流量網絡中使用 tcpdump 和 Wireshark 時,可能會對系統性能產生一定的影響。tcpdump 捕獲數據包的性能會受到系統負載和網絡接口速度的限制。在高流量的網絡中,tcpdump 可能會因爲處理不過來大量的數據包而導致丟包,從而影響分析結果的準確性。此外,tcpdump 在解析和顯示數據包時也會佔用一定的系統資源,可能會導致系統運行變慢 。
Wireshark 在捕獲和分析大量數據包時,也會消耗較多的系統資源,如內存和 CPU。如果計算機的配置較低,在使用 Wireshark 分析高流量網絡時,可能會出現界面卡頓、響應遲緩等情況,甚至可能導致程序崩潰。爲了避免性能問題,可以在抓包前設置合理的過濾條件,只捕獲和分析我們感興趣的數據包,減少數據量;同時,確保計算機具有足夠的硬件資源,如內存和 CPU,以支持 Wireshark 的運行 。
4.3 存儲空間
長時間運行 tcpdump 可能會消耗大量的磁盤空間。當我們使用 tcpdump 抓包並保存文件時,如果沒有及時清理,隨着時間的推移,抓包文件會越來越大。例如,在一個繁忙的網絡環境中,持續抓包幾個小時,可能會生成幾個 GB 甚至更大的抓包文件。這些文件不僅會佔用大量的磁盤空間,還會影響系統的性能。因此,我們要定期管理捕獲文件,及時刪除不需要的抓包文件,或者將重要的抓包文件進行歸檔存儲 。
4.4 時間同步
在抓包時,確保服務器或計算機的時間正確同步非常重要。準確的時間戳對於分析事件時間線至關重要,它可以幫助我們確定網絡事件發生的先後順序,分析網絡通信的流程。如果時間不同步,可能會導致分析結果出現偏差,無法準確判斷網絡問題的根源。例如,在分析網絡攻擊事件時,如果時間不準確,可能會將攻擊事件的發生時間與其他正常網絡活動的時間混淆,從而影響對攻擊行爲的判斷和應對措施的制定 。所以,在進行抓包分析前,要確保系統時間與標準時間同步,可以使用 NTP(網絡時間協議)等工具來同步時間 。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/HZidDx8aK5dtWejGD3GAjg