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