Netcat或nc是一個命令行程序,它使用TCP或UDP協議通過網絡連接讀取和寫入數據。
它是網絡和系統管理員中最強大的工具之一,被視為網絡工具的瑞士軍刀。
Netcat是跨平臺的,可用于Linux,macOS,Windows和BSD。您可以使用Netcat調試和監視網絡連接,掃描打開的端口,傳輸數據,作為代理等等。
Netcat軟件包已預安裝在macOS和流行的Linux發行版,如Ubuntu,Debian,CentOS,Fedora等。
Netcat命令的最基本語法形式是nc [options] host port
。host
可以是u遠程主機的域名,主機名或者是IP地址。port
是端口。
在Ubuntu,您可以使用netcat
或nc
。它們都是Netcat的openBSD版本的符號鏈接。
默認情況下,Netcat將嘗試建立與指定主機的TCP連接。如果要建立UDP連接,請使用-u
選項。
nc host port
nc -u host port
端口掃描
在大多數情況下,對于復雜的端口掃描,Nmap是比Netcat更好的工具。
但掃描端口也是Netcat最常見的用途之一。您可以掃描單個端口或端口范圍。例如要掃描范圍為20-80的端口,請運行命令nc -z -v 10.10.8.8 20-80
。
nc
命令的-z
選項將不會不向其發送任何數據,而僅掃描開放的端口,如果你需要更多相信的信息請添加-v
選項。
如果只是想打印開放端口的行,則可以使用grep命令過濾結果,在每一行輸出的記錄中succeeded表示可以成功連接的端口。
nc命令默認僅掃描TCP端口,如果你需要掃描UDP端口,只需將-u
選項添加到nc命令。
nc -z -v 10.10.8.8 20-80
nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
nc -z -v -u 10.10.8.8 20-80
nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused
...
nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused
Connection to 10.10.8.8 80 port [tcp/http] succeeded!
您也可以使用Netcat查找服務器軟件及其版本。例如,如果您在默認的SSH端口22上向服務器發送EXIT命令,輸出將包含SSH服務的版本號。
echo "EXIT" | nc 10.10.8.8 22
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.
Netcat 發送文件
通過創建基本的客戶端/服務器模型,可以使用Netcat將數據從一臺主機傳輸到另一臺主機。
使用-l
選項運行nc命令在接收的主機監聽指定端口,然后在另一臺遠程主機建立TCP連接并且此主機發送文件。
請在接收端的計算機,運行命令nc -l 5555 > file_name
,它將打開端口5555并接收來自遠程計算機的數據,然后將接收的數據重定向到文件file_name
。
要在發送端的計算機建立與接收端計算機的TCP連接,請運行命令nc receiving.host.com 5555 < file_name
。
當兩個計算機之間的連接建立時,命令將會開始發送file_name的文件內容到接收端的主機。
nc -l 5555 > file_name #run on receivce of computer
nc receiving.host.com 5555 < file_name #run on send of computer
Netcat 發送目錄
如果要遞歸發送目錄數據,可以使用tar命令在發送端的計算機創建歸檔文件,然后在接收端的計算機提取存檔文件。
在接收端的計算機運行命令nc -l 5555 | tar xzvf -
設置Netcat監聽端口5555并接收數據。
然后將接收到的數據通過管道傳遞到tar命令,tar命令的xzvf
選項表示提取存檔.tar.gz
文件。
在發送端的計算機運行命令tar czvf - /path/to/dir | nc receiving.host.com 5555
,建立與接收端計算機的連接,然后發送由tar
命令創建存檔文件數據。
您可以在兩端觀察傳輸進度。完成后,鍵入CTRL+C
關閉連接。
nc -l 5555 | tar xzvf - #run on receivce of computer
tar czvf - /path/to/dir | nc receiving.host.com 5555 #run on send of computer
創建聊天服務器
在兩個或多個主機之間創建在線聊天的過程與傳輸文件時相同。
首先在第一臺主機運行命令nc -l 5555
設置Netcat監聽5555端口,在第二臺主機上,運行命令nc first.host.com 5555
連接到第一臺主機的5555端口。
現在,如果您鍵入一條消息并按ENTER
,它將同時顯示在兩臺主機上。要關閉連接,請鍵入CTRL+C
。
nc -l 5555 #run on receivce of computer
nc first.host.com 5555 #run on send of computer
Netcat HTTP請求
盡管有許多更好的HTTP請求工具,例如curl,您也可以使用Netcat將各種請求發送到遠程計算機。
例如,要從OpenBSD網站檢索Netcat手冊頁,請運行以下命令。
命令在終端將會打印HTTP header和HTML代碼的完整響應。
printf "GET /nc.1 HTTP/1.1\\r\\nHost: man.openbsd.org\\r\\n\\r\\n" | nc man.openbsd.org 80
結論
在本教程中,您學習如何使用Netcat命令建立和測試TCP和UDP連接。
-
Linux
+關注
關注
87文章
11292瀏覽量
209328 -
TCP
+關注
關注
8文章
1353瀏覽量
79055 -
UDP
+關注
關注
0文章
325瀏覽量
33931 -
命令行
+關注
關注
0文章
77瀏覽量
10385
發布評論請先 登錄
相關推薦
評論