為什么 Netcat 是最好的 Linux 故障排除工具之一
故障排除工具可以簡單,也可以非常復雜。它們可以非常小巧,也可以非常龐大,各種大小都有。是否需要將所有功能集中在一個工具中存在爭議。當您使用適度的工具和實用程序解決問題時,您將對問題有更深入的理解。
通過避免在不必要的中間件層后面混淆基本系統(tǒng),更容易理解系統(tǒng)。這是因為您必須花時間逐個測試和理解每個組件。
在本文中,我們將介紹一個非常簡單的故障排除工具,稱為 Netcat。這個實用程序已經存在了近三十年,雖然表面上很簡陋,但在正確使用時提供了強大的功能和靈活性。
讓我們探索一下 Netcat 的一些多樣性。
它可以作為客戶端
如果您想測試遠程服務器上的一個開放端口,那么沒有比使用 Netcat 更簡單的方法了。您可以通過 TCP 或 UDP 向服務器發(fā)送任意有效負載,發(fā)送到任何您想要的端口。
下面是一個簡單的示例,我們向運行在本地主機上端口 5000 的服務器發(fā)送一些基本的 UDP 字符串數據:
linuxmi@linuxmi ~/www.linuxmi.com
% echo "hello" | nc -u 127.0.0.1 5000
如果服務器期望接收此類型的數據,它將會做出相應的響應,并且您將在控制臺上看到響應結果的打印輸出。如果服務器期望接收JSON數據塊或其他二進制數據,您也可以以相同的方式將其傳輸到Netcat中。
以下是使用JSON數據的示例:
echo '{"key":"value"}' | nc -u 127.0.0.1 5000
假設遠程服務器有一個集成的JSON解析器,您應該能夠使用這種簡單的方法發(fā)送純JSON數據。只需記住在必要時跟蹤引號并對其進行轉義。
它還可以作為服務器
Netcat也可以作為一個簡單的套接字服務器。假設您想要快速啟動一個服務器,監(jiān)聽特定端口的傳入數據。使用Netcat非常簡單:
nc -l -u -p 5000 127.0.0.1
這個命令將在本地機器上打開5000端口,并監(jiān)聽傳入的UDP流量。如果將此與前面的客戶端命令結合起來,您可以將流量發(fā)送到服務器以進行顯示。這意味著您可以創(chuàng)建一個簡單的消息中繼服務器,并且甚至可以使用Netcat在服務器之間傳輸數據。
這兩個命令也可以在TCP模式下運行。只需刪除 -u 標志,默認情況下Netcat將以TCP模式運行。
它可以發(fā)送不同類型的有效載荷
Netcat不僅功能豐富,可以同時作為客戶端和服務器,還可以發(fā)送各種負載。由于可以將數據通過管道傳輸到Netcat,您可以發(fā)送許多有趣的內容。如果我們想使用Netcat發(fā)出一個HTTP GET請求會怎樣呢?
linuxmi@linuxmi ~/www.linuxmi.com
% printf 'GET / HTTP/1.1\r\nHost:google.com\r\n\r\n' | nc google.com 80
因為我們手動鍵入了HTTP請求的格式,所以看起來有點凌亂,但它確實有效。這個命令會返回一個301,因為Google只支持通過HTTPS工作。盡管它監(jiān)聽的是端口80,但它會將您重定向到443端口進行安全連接。
將這樣的負載填充到Netcat對于像Google這樣的大型網站來說并沒有太大幫助,但對于小型開發(fā)服務器來說是有用的。如果您想手動修改HTTP負載或發(fā)送錯誤數據,這是一個快速的方法。
當然,還有其他更適合此任務的工具,比如curl,但是通過Netcat,您可以構建原始請求。原始請求操作對于需要對發(fā)送的數據具有更精細控制的低級故障排除非常有用。
它可以查找開放的端口
這種多功能性不僅限于客戶端和服務器應用程序。使用Netcat,您可以掃描基礎架構以查找開放的端口。通過以下命令,您可以檢查服務器上的TCP端口是否開放:
linuxmi@linuxmi ~/www.linuxmi.com
% nc -zv google.com 80
這顯然會返回成功,因為Google確實開放了用于傳入HTTP請求重定向的端口80。您可以更改為您喜歡的任何主機和端口。您甚至可以通過輸入一個端口范圍來掃描端口,例如:80-443。
如果您想掃描UDP端口,只需在命令中添加 -u 標志。
如果您需要具有廣泛可配置選項的復雜網絡掃描,那么nmap可能是一個更好的選擇。如果您只需要快速檢查一些端口是否開放,為什么要安裝所有額外的復雜功能呢?
它可以傳輸文件
不,這不會是通過網絡發(fā)送文件的最快或最可靠的方式,但在緊急情況下它可以完成任務。如果您想通過Netcat發(fā)送文件,絕對可以做到。以下是如何設置遠程服務器:
linuxmi@linuxmi ~/www.linuxmi.com
% nc -l -p 5000 > foo.txt
這將打開Netcat并在端口5000上進行監(jiān)聽。傳入的數據將被寫入文件foo.txt。
而在實際發(fā)送文件的本地客戶端上,您可以執(zhí)行以下操作:
nc <host> 5000 < foo.txt
這將將foo.txt的內容發(fā)送到 <host>,其中遠程Netcat服務器在端口5000上進行監(jiān)聽。
這是一種快速而簡單的方法來傳輸少量數據。盡管它可以工作,但我強烈建議不要將Netcat作為主要的文件傳輸方式?,F在有更安全、更可靠的選項可供選擇。