如何在 Linux 分析網路封包?ngrep 網路封包分析工具使用教學




在當今的數位世界中,網路安全和故障排除變得至關重要。了解網路流量以及分析封包可以幫助我們識別問題、監視流量並確保安全性。而 Linux 上的 ngrep 工具是一個強大的網路封包分析工具,它能夠幫助我們輕鬆實現這些目標。

ngrep 是什麼?

ngrep 是一個在命令行下運行的工具,它可以監視網路流量,並允許我們使用各種過濾條件來查找和顯示特定的封包。它是 grep(全局正則表達式打印)的一個變種,但針對網路封包進行操作。ngrep支援正則表達式和多種協議,使其成為一個非常強大的工具。

ngrep 和 Wireshark 之間的差異是什麼?

ngrep 是一個命令行工具,用於捕獲和分析封包,而 Wireshark 是一個圖形化的網路封包分析工具。Wireshark提供了更多的可視化功能,而 ngrep 更適合自動化任務和命令行操作。

為什麼需要網路封包分析工具?

封包是在網路上傳輸的數據單元,它們包含了通信的訊息,例如源IP地址、目的IP地址、 port 號、數據內容等。網路封包分析工具對於許多方面都非常有用。以下是一些常見的使用情境:

  • 網路故障排除:當網路出現問題時,ngrep 可以幫助您捕獲並分析封包,以找出問題所在。
  • 安全監控:您可以使用 ngrep 來監視網路流量,以檢測可能的入侵或惡意活動。
  • 流量分析ngrep 可以幫助您了解應用程序之間的通信模式,以優化性能。
  • 協議分析:如果您需要深入瞭解特定協議的工作原理,ngrep 可以提供實時數據。

安裝 ngrep

要開始使用 ngrep,首先需要安裝它。您可以使用您的Linux發行版的包管理器進行安裝。以下是一些常見的命令:

使用APT(Debian/Ubuntu)
sudo apt-get install ngrep

使用YUM(CentOS/RHEL)
sudo yum install ngrep

使用dnf(新版Fedora)
sudo dnf install ngrep

您也可以從 ngrep 的官方網站下載源碼,然後按照說明進行編譯和安裝。

基本使用

安裝完成,您可以開始使用ngrep了。以下是一些基本命令示例:

啟動ngrep

要啟動ngrep,只需在終端中運行以下命令:

sudo ngrep
interface: eth0 (192.168.1.2/255.255.255.0)
filter: (ip or ip6) and (src host 192.168.1.2 or dst host 192.168.1.2)

###################
T 192.168.1.2:12345 -> 8.8.8.8:53 [AP]
  0x0000:  4500 003c 1a2b 4000 4011 26f7 c0a8 0102  E..<.+@.@.&.....
  0x0010:  0808 0808 3039 0035 0028 f334 7370 6974  ....09.5.(.4spit
  0x0020:  6c69 6768 742d 7772 6872 6b02 7068 696c  lighth-wrhrk.phil
  0x0030:  6970 2d73 6870 312e 666f 6f01 00       ip-shp1.foo..
###################

###################
T 8.8.8.8:53 -> 192.168.1.2:12345 [AP]
  0x0000:  4500 0042 2b9e 0000 4011 7f33 0808 0808  E..B+....@..3...
  0x0010:  c0a8 0102 0035 3039 003e 47c7 7478 7075  .....509.>G.txtpu
  0x0020:  6876 6377 2d77 7278 7470 736c 5f5f 6761  hvwqw-wrxtpsl__ga
  0x0030:  676c 676e 6c67 6c68 7263 696e 676e 7474  glggllhrcingntt
  0x0040:  6772 6e77 6c69 6768 742d 7772 6872 6b    grnwlighth-wrhrk
###################

這裡顯示了兩個封包,分別是從 192.168.1.2 發送到 8.8.8.8 的DNS請求和從 8.8.8.8 回應的DNS回答。每個封包都包括源IP、目的IP、連接阜以及封包的內容(以十六進制表示)。 請注意,實際輸出將根據您的過濾條件和網路流量而有所不同。您可以根據自己的需求調整sudo ngrep的過濾條件以捕獲特定的封包。

監聽網路流量

要監聽特定網路接口上的流量,可以使用以下命令:

sudo ngrep -i <interface>

請將 <interface> 替換為您要監聽的接口的名稱,例如 eth0

過濾封包 – dst 目的IP

這個指令會捕捉到目的IP地址以 “192.168” 開頭且包含 “HTTP” 字串的封包,並將匹配的封包內容按行顯示。

sudo ngrep dst host 192.168.1.1
interface: eth0 (192.168.1.2/255.255.255.0)
filter: (ip or ip6) and (dst host 192.168.1.1)

###################
T 192.168.1.2:12345 -> 192.168.1.1:80 [AP]
  0x0000:  4500 003c 1a2b 4000 4011 26f7 c0a8 0102  E..<.+@.@.&.....
  0x0010:  c0a8 0101 1234 0050 0028 f334 7370 6974  ....1234.P.(.4spit
  0x0020:  6c69 6768 742d 7772 6872 6b02 7068 696c  lighth-wrhrk.phil
  0x0030:  6970 2d73 6870 312e 666f 6f01 00       ip-shp1.foo..
###################

###################
T 192.168.1.3:54321 -> 192.168.1.1:80 [AP]
  0x0000:  4500 0042 2b9e 0000 4011 7f33 c0a8 0103  E..B+....@..3...
  0x0010:  c0a8 0101 1357 0050 003e 47c7 7478 7075  .....1357.>G.txtpu
  0x0020:  6876 6377 2d77 7278 7470 736c 5f5f 6761  hvwqw-wrxtpsl__ga
  0x0030:  676c 676e 6c67 6c68 7263 696e 676e 7474  glggllhrcingntt
  0x0040:  6772 6e77 6c69 6768 742d 7772 6872 6b    grnwlighth-wrhrk
###################

dst host 192.168.1.1:這部分是過濾條件,它指定了我們感興趣的封包應該具有的特定目標 IP 地址,即 192.168.1.1。這表示 ngrep 將僅顯示目標 IP 地址為 192.168.1.1 的封包。

過濾封包 – src 來源 IP

這個指令會捕捉到源IP地址以 “192.168” 開頭且包含 “HTTP” 字串的封包,並將匹配的封包內容按行顯示。

sudo ngrep src net 192.168
interface: any
filter: (ip or ip6) and ( src net 192.168 )
match: src host 192.168.0.1 and dst net 192.168.0.0/24

T 192.168.0.1:12345 -> 192.168.0.2:80 [AP]
  GET /example.html HTTP/1.1..Host: 192.168.0.2..

T 192.168.0.2:80 -> 192.168.0.1:12345 [AP]
  HTTP/1.1 200 OK..Content-Type: text/html..Server: Apache..

...

過濾封包 – 特定文字

監視包含 “HTTP” 字樣的網路封包,而 -q 參數用於啟用安靜模式,只顯示匹配的封包內容而不顯示其他訊息。

sudo ngrep -q 'HTTP'
HTTP GET request from 192.168.1.2:12345 to www.example.com:80

HTTP/1.1 200 OK
Server: Apache
Content-Length: 1234
Content-Type: text/html

HTTP response to 192.168.1.2:12345 from www.example.com:80

保持原始資料的換行

可以使用 -W 參數來指定換行模式為 byline,這樣在查看封包內部的文字資料時,版面會更容易閱讀。

sudo ngrep -q -Wbyline 'HTTP' 
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

進階用法

ngrep 支援多種進階功能,例如使用正則表達式過濾、將封包儲存到文件以及讀取封包文件進行分析。這些功能可以幫助您更深入地分析網路流量。

實例說明

為了幫助您更好地理解 ngrep 的使用,讓我們進行一些實例演練。

監聽HTTP請求

假設您想要監聽來自特定主機的HTTP請求,您可以使用以下命令:

sudo ngrep -q 'GET|POST' host <hostname> and port 80

這將僅顯示目的地主機為 <hostname> 且 port 為80的HTTP GET和 POST 請求。

監聽SSH連接

如果您希望監聽SSH連接,可以運行以下命令:

sudo ngrep -q 'ssh' and port 22

這將僅顯示來自 port 22 的 SSH 流量。

監聽目的封包

要分析DNS查詢,您可以使用以下命令:

sudo ngrep -q -Wbyline 'HTTP' and dst net 192.168

這將僅顯示來自 port 53的DNS查詢。

監視網路中的 DNS 請求,但只關注特定域名的請求

正則表示式常用於網路封包分析,可更精確地過濾特定的數據。以下是一個實際情境,演示如何使用正則表示式來過濾封包:

sudo ngrep -q -Wbyline -d eth0 'udp port 53' | grep -E 'example\.com|openai\.org'
  • -q:安静模式,只顯示出符合封包的内容。
  • -W byline:換行顯示封包内容,以提高可讀性。
  • -d eth0:指定要監聽的網路介面,例如 eth0。
  • 'udp port 53':捕捉 UDP 53 port 上的 DNS 請求。
  • | grep -E 'example\.com|openai\.org':使用 grep 過濾器,只顯示包含 “example.com” 或 “openai.org” 域名的封包。

如何將 ngrep 的輸出儲存到檔案中?

可以使用-O選項來將封包保存到檔案中。例如:sudo ngrep -O output.pcap將封包保存到名為output.pcap的文件中。

sudo ngrep -O output.pcap

若要從已經儲存下來的 pcap 檔案中,篩選出指定的內容,可以使用 -I 參數指定 pcap 檔案的位置:

ngrep -I input.pcap




主頁 » LINUX » 實用技巧 » 如何在 Linux 分析網路封包?Linux ngrep 網路封包分析工具使用教學

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *