簡介
使用 Linux 的最大優勢之一是它提供了大量實用的公用程式。程式內建的功能通常足以讓大多數程式設計師完成工作。這意味著在大多數情況下,您不需要下載外部程式和軟體。內建工具將為您提供足夠的功能。在這些實用的功能中,就包括 netcat 公用程式。
在網路工具的世界中,netcat 堪稱是一款功能強大到近乎逆天的武器。它是一個極其多功能的指令,可用於多種用途。例如,您可以使用這單一工具來監控、測試以及在系統連線中傳輸各種檔案和資料。在本指南中,我們將探索如何在 VPS 上使用 netcat 執行所有這些操作.
尋找 Netcat
Netcat 通常在所有現代 Linux 發行版中都可用。這意味著您很可能已經擁有它,而不需要特意去安裝。在我們的教學中,我們將使用 Ubuntu 12.04 VPS。您可以按照我們的教學安裝您自己的 Ubuntu 伺服器。 Ubuntu 通常配備 BSD 變體的 netcat 公用程式。請記住,如果您使用的是其他版本,其運作方式可能會有些許不同。
了解基本語法
我們首先來學習 netcat 公用程式中的通用語法。您可以透過啟動 TCP 連線 來操作 netcat。該連線必須發起到遠端主機。以下是 netcat 的基本語法:
|
1 |
netcat [options] host port |
此指令將嘗試啟動到遠端主機的 TCP 連線。它連接到哪個主機取決於您在指令中指定的連接埠號碼。該連線將是未加密的。如您所見,此指令的運作方式與 telnet 指令的運作方式類似。
另一方面,您也可以發起 UDP 連線。若要傳送 UDP 封包而不是 TCP,您必須使用 -u 選項。它看起來會像這樣:
|
1 |
netcat -u host port |
如果您願意,也可以指定連接埠範圍。為此,您需要在第一個和最後一個連接埠之間加上連字號。以下是一個範例:
|
1 |
netcat host startport-endport |
您也可以為此添加更多旗標。另一點需要注意的是,您可以交替使用 netcat 和 nc。它們會啟動相同的指令,這意味著它們互為別名。
使用 Netcat 進行連接埠掃描
首先,讓我們來探索 netcat 最常見的用途之一。我們將了解如何將其用作連接埠掃描器。在大多數情況下,您最好使用像 nmap 這樣的工具。但是,如果您只需要執行簡單的連接埠掃描,那麼 netcat 就非常有用。它可以幫助您輕鬆識別開放的連接埠。
要將 netcat 用作連接埠掃描器,您需要提及連接埠範圍。您將使用 -z 選項來執行此操作。因此,系統將掃描連接埠範圍,而不是嘗試建立連線。假設我們要掃描連接埠 1 到連接埠 1000:
|
1 |
netcat -z -v domain.com 1-1000 |
除了 -z 指令外,我們還使用了 -v 選項。後者使我們能夠為指令提供更多資訊。它允許我們輸出更詳細的資訊(verbose)。
您將獲得如下輸出作為回報:

輸出顯示了每個單獨連接埠的大量資訊。您可以知道每個連接埠的連線狀態。另一方面,如果您知道 IP 位址,則可以使用它來代替網域名稱。這會使過程快得多。以下是一個範例:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 |
我們使用 -n 旗標來指示系統不需要使用 DNS 來解析 IP 位址。
通常,傳回的訊息會傳送到標準錯誤(standard error)。為了更快地篩選出結果,您可以將它們重導向到標準輸出(standard out)。我們將使用 2>&1 bash 語法來執行此操作。隨後,我們將使用 grep 篩選結果。讓我們將其應用到我們的範例中:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep 成功 |
輸出結果將類似於這樣:
![]()
輸出顯示在給定範圍內只有連接埠 22 是開放連接的。連接埠 22 剛好是傳統的 SSH 連接埠。
透過 Netcat 進行通訊:它是如何運作的?
接下來,我們將介紹如何使用 netcat 發送 TCP 和 UDP 封包。不僅如此,它還可以在各種連接埠上接收封包。得益於此功能,您可以使用兩個 netcat 執行個體來建立用戶端-伺服器關係。首先,您需要確定用戶端和伺服器。在初始設定之後,雙方用戶端都可以向任一方向發送和接收封包。
自然地,您必須在其中一個系統上設定 netcat 以監聽某個連接埠上的連接。為此,您必須使用 -l 參數。藉此,您可以像這樣選擇您想要的連接埠:
|
1 |
netcat -l 4444 |
現在,此機器上的 TCP 將監聽連接埠 4444 上的連接。需要注意的一點是,如果您是非 root 或一般使用者,您將無法存取 1000 以下的連接埠。
接下來,您必須設定第二台機器以建立連接。您將使用相同的連接埠號碼並指定特定的網域名稱,如下所示:
|
1 |
netcat domain.com 4444 |
執行此指令不會產生任何輸出。然而,它會建立連接。這意味著您可以開始從任一伺服器向另一台伺服器發送訊息。為此,您只需輸入訊息,然後按下 ENTER 鍵。訊息將同時顯示在兩個螢幕上。
完成後,您可以透過按下 CTRL+D 來關閉 TCP 連接。
您可以使用 Netcat 發送檔案嗎?
接下來,我們將向您展示如何透過 netcat 發送檔案。透過 TCP 連接,您可以發送訊息以及其他類型的資料。首先,您必須選擇一台機器來監聽連接。然而,我們不會在指令中直接輸入資訊,而是將其放入一個檔案中,如下所示:
|
1 |
netcat -l 4444 > received_file |
在另一台機器上,您必須建立一個新的文字檔案。以下是要使用的指令:
|
1 |
echo "Hello, this is a file" > original_file |
要傳輸檔案,您將其作為正在監聽的電腦上連接的輸入:
|
1 |
netcat domain.com 4444 < original_file |
另一台電腦將顯示一個名為「received_file」的新檔案。它將包含我們輸入的所有資訊:
|
1 |
cat received_file |
您可以使用此公用程式並將其轉換為檔案傳輸程式。假設您想傳輸目錄的內容。我們將透過製作一個未命名的 tarball(壓縮檔)來實現,並將其傳輸到系統中並解壓縮到遠端目錄中。在另一台機器上,我們需要準備好接收檔案。我們知道我們需要解壓縮並提取它。為此,請執行以下指令:
|
1 |
netcat -l 4444 | tar xzvf - |
破折號(-)表示 tar 將對標準輸入進行操作。這來自我們建立初始連接時初始伺服器上的 netcat。
最後,我們可以將整個目錄的內容放入一個 tarball 中,並透過 netcat 發送,如下所示:
|
1 |
tar -czf - * | netcat domain.com 4444 |
tar 指令中的破折號表示我們正在指示系統對目錄內容進行打包和壓縮。它還指示系統將結果寫入標準輸出。該檔案將透過 TCP 連接傳送到另一端。接收端伺服器將對其進行解壓縮並將其儲存到目前的遠端目錄中。
就像這樣,您也可以透過 netcat 傳輸其他類型的資料。許多人使用 dd 指令來製作磁碟映像並進行傳輸。有關傳輸資料和檔案的另一種方法,請參閱我們的 展示如何在使用 SFTP 傳輸檔案時確保安全性的教學課程.
將 Netcat 用作網頁伺服器
netcat 的另一個實用功能是您可以用它來測試您的網頁。假設我們正在使用伺服器建立一個像這樣的 HTML 檔案:
|
1 |
nano index.html |
這是該檔案包含的 HTML 程式碼:
|
1 2 3 4 5 6 7 8 9 10 |
<html> <head> <title>測試頁面</title> </head> <body> <h1>第一級標題</h1> <h2>副標題</h2> <p>此處為一般文字</p> </body> </html> |
將此內容輸入到檔案中,然後儲存並關閉它。通常,連接埠 80 是預設的網頁連接埠。作為一般的非 root 使用者,我們將選擇連接埠 8888。假設您只想提供並檢查該網頁一次,您應該使用以下指令:
|
1 |
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888 |
若要檢視檔案內容,請開啟您的瀏覽器並造訪以下網址:
|
1 |
http://server_IP:8888 |
您將能夠看到您用 HTML 檔案編寫的網頁:

一旦您取得該網頁,netcat 連線就會關閉。這意味著重新整理網頁將會顯示錯誤,而不是內容。這是因為我們將其設定為僅提供一次網頁。如果您希望持續接收連線以無限期地查看該網頁,您將需要使用不同的程式碼:
|
1 |
while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done |
在這裡,我們將上一個指令包裝在一個無限迴圈中。如果您想停止迴圈,只需按下 CTRL-C 即可。現在,即使在第一次連線關閉後,您也可以繼續檢視您的網頁及其轉譯結果。然而,這已是將 netcat 工具用作網頁伺服器所能發揮的最大功能。請勿嘗試使用它來提供實際的網站,因為它不提供任何安全性。相反地,您可以參考我們關於如何安裝 Nginx 等網頁伺服器軟體 或 Apache.
結論
在本教學中,我們介紹了 netcat 工具,並探索了它作為 Ubuntu 工具的多功能性。如我們在上述章節中所介紹的,您可以使用它來進行通訊、資料傳輸和提供網頁。它非常適合透過 TCP/UDP 連線在伺服器之間進行快速互動。對於許多基礎功能和診斷來說,這是一個非常有用的功能。
祝您使用愉快!
留言
目前尚無留言。成為第一個留言的人吧。