在當今的數位世界中,網路安全和故障排除變得至關重要。了解網路流量以及分析封包可以幫助我們識別問題、監視流量並確保安全性。而 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
- 中文參考資料:
- 英文參考資料: