在 Linux 中使用 tcpdump 抓取資料包
監控透過網路傳輸的所有這些資料包的過程稱為嗅探。網路管理員通常使用嗅探器來排查故障和監控網路流量。攻擊者使用這些嗅探器來捕獲和監控資料包,以竊取敏感的使用者帳戶資訊,例如密碼、使用者名稱和位置。
網路資料包是分組並在分組交換網路(如網際網路)等計算機網路上傳輸的基本資料單元。
您還可以使用捕獲透過網路介面傳輸的所有資料包的軟體來監控和攔截網路上的流量。您也可以使用硬體工具來完成同樣的操作,因為嗅探器既可以作為軟體也可以作為硬體提供。在本指南中,我們將瞭解如何在 Linux 中使用 tcpdump 處理嗅探資料包。
在 Linux 中使用 tcpdump 抓取資料包
Tcpdump 是一種資料包分析和嗅探工具,Linux 系統管理員使用它來排查連線問題。有時,您也可以將此工具用於安全目的。此工具主要分析、過濾和捕獲透過您的系統傳輸的網路流量,例如 IP/TCP 資料包。
它將捕獲的資訊收集到 .pcap 副檔名中,您只能在命令工具或 Wireshark 的幫助下開啟它。tcpdump 在各種 Linux 發行版中作為預安裝的實用程式提供。但是,您可以透過以下命令安裝它:
sudo apt install tcpdump (for Ubuntu/Debian-based distros) yum install tcpdump (for RedHat-based Linux distros) sudo pacman -S tcpdump (for Arch Linux)
您還可以從其幫助頁面獲取有關 tcpdump 命令的簡要資訊:
~$: tcpdump --h
現在讓我們看看一些您可以在 tcpdump 中嘗試的不同選項的示例,以捕獲網路資料包。
顯示所有可用的網路介面
使用 tcpdump 命令中的 -D 選項將列出系統中可用的網路介面。
~$: sudo tcpdump -D [sudo] password for prateek: 1.enp0s3 [Up, Running, Connected] 2.any (Pseudo-device that captures on all interfaces) [Up, Running] 3.lo [Up, Running, Loopback] 4.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless] 5.nflog (Linux netfilter log (NFLOG) interface) [none] 6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none] 7.dbus-system (D-Bus system bus) [none] 8.dbus-session D-Bus session bus none
從上面的輸出中,您可以看到每個網路介面的狀態。Tcpdump 建立了一個名為“any”的偽裝置,而不是實際的網路介面。因此,透過偵聽此偽裝置,該工具可以捕獲透過所有介面傳輸的資料包。
嗅探網路介面
您可以使用以下命令捕獲當前網路介面:
~$: sudo tcpdump
使用 tcpdump 的各種選項嗅探資料包
您可以透過多種不同的方式和格式捕獲網路介面,列表如下:
如果您想**從特定的網路介面捕獲資料包**,請使用 -i 選項:
~$: sudo tcpdump -i <network_interface>
類似地,使用 tcpdump 命令中的 -c 選項來**捕獲特定數量的資料包**:
~$: sudo tcpdump -c <number of packets> -i <network_interface>
例如,讓我們透過 tcpdump 命令從“lo”介面捕獲 2 個數據包:
~$: sudo tcpdump -c 2 -i lo
在介面名稱之後,您可以使用“tcp.”**僅捕獲 tcp 資料包**。
~$: sudo tcpdump -i <network_interface> tcp
讓我們捕獲“lo”網路的 tcp 資料包:
~$: sudo tcpdump -i lo tcp
tcpdump 命令中的 -XX 標誌**以十六進位制和 ASCII 格式列印值**。
~$: sudo tcpdump -XX -i <network_interface>
在命令中新增 -A 以**僅以 ASCII 格式列印資料包**。
~$: sudo tcpdump -A -i <network_interface>
顯示時間戳資訊
Tcpdump 在每個資料包轉儲輸出的第一列中新增一個時間戳,以指示捕獲資料包的時間。使用此命令,您可以使用 -t 標誌來支援時間戳輸出的格式化。
~$: sudo tcpdump -t
使用上述命令時,它不會列印任何時間戳資訊。
您還可以**以紀元時間列印時間戳**。在計算中,它是計算機的時間戳和時鐘確定值的相對時間和日期。1970 年 1 月 1 日 00:00:00 UTC 稱為 Unix 紀元。
這些紀元用作單個數字,便於計算,以維護時間參考。使用 -tt 選項命令,您可以以紀元時間列印時間戳:
~$: sudo tcpdump -tt
您還可以**以增量時間格式列印時間戳的輸出**。增量時間是完成上一幀所花費的時間。您可以使用 tcpdump 命令中的 -ttt 標誌以增量時間列印輸出。
~$: sudo tcpdump -ttt
使用 -tttt 標誌列印帶有日期的時間戳
~$: sudo tcpdump -tttt
在特定介面上捕獲 IP 地址資料包
您可以將 -u 選項與命令一起新增,以如下所示顯示特定介面上的 IP 地址資料包:
~$: sudo tcpdump -n -i <network_interface>
例如,我們捕獲“lo”網路上的 IP 地址資料包。
~$: sudo tcpdump -n -i lo
捕獲並將資料包儲存到檔案
您可以儲存 IP/TCP 資料包並在將來分析它們。使用 tcpdump 命令,您可以使用 -w 選項將這些資料包儲存到檔案中。請記住,這些檔案的副檔名應始終為 .pcap,它代表**資料包捕獲**。
~$: sudo tcpdump -w <file_name.pcap> -i <network_interface>
在這種情況下,我們將“enp0s3”介面資料包儲存到名為“prateek.pcap”的檔案中。(~$: sudo tcpdump -w <file_name.pcap> -i <network_interface>)
~$: sudo tcpdump -w prateek.pcap -i enp0s3 [sudo] password for prateek: tcpdump: listening on ep0s3, link-type EN10MB (Ethernet), snapshot length 262144 bytes
此外,您可以透過 -c 選項限制或設定每個檔案的大小:
~$: sudo tcpdump -w prateek.pcap -i enp0s3 -C 3
這裡 3 代表 3MB,即當“prateek.pcap”檔案大小達到 3MB 時,tcpdump 將為每增加 3MB 建立更多此類檔案,例如 prateek pcap1、prateek.pcap2 等。
讀取從儲存的檔案中捕獲的資料包
我們可以使用 -r 標誌讀取儲存捕獲資料包的檔案,如下所示。
~$: sudo tcpdump -r <file_name.pcap> -i <network_interface>
在上面的示例中,我們儲存了“prateek.pcap”檔案。我們可以使用“-r”選項讀取此檔案中的資料包,如下所示:
~$: sudo tcpdump -r prateek.pcap -i enp0s3
結論
在本指南中,我們瞭解瞭如何在 Linux 中使用 tcpdump 嗅探資料包。您可以使用不同的標誌顯示資料包和檔案,在本指南中我們給出了許多示例。
本指南將幫助您使用 tcpdump 捕獲和分析 TCP/IP 資料包。此外,如果您想了解有關 tcpdump 命令的其他選項的更多資訊,請使用 -h 選項。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP