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