nc 命令,網(wǎng)絡(luò)工具中的“瑞士軍刀”了解一下?


點(diǎn)擊「閱讀原文」查看良許原創(chuàng)精品視頻。
點(diǎn)擊「閱讀原文」查看良許原創(chuàng)精品視頻。
前言
今天來介紹這個(gè)網(wǎng)絡(luò)工具界的“瑞士軍刀”-nc(netcat),它短小精悍,是網(wǎng)絡(luò)調(diào)試?yán)鳎降子泻文苣湍兀?/span>
查看端口是否被占用
還記得我們?cè)趎etstat中介紹的如何查看端口被占用嗎?nc也可以完成這樣的事情。它使用-l(listen)參數(shù),用于綁定指定端口并監(jiān)聽連接:
$?nc?-l?6379
nc:?Address?already?in?use
當(dāng)看到Address already in use的時(shí)候,就知道這個(gè)端口被占用了,否則它就會(huì)在這個(gè)端口監(jiān)聽。當(dāng)然這個(gè)作用是我瞎說的,但是可以用。
端口掃描
例如需要掃描某個(gè)機(jī)器上21-30哪些端口是開放的:
$?nc??-n?127.0.0.1?-z?1230-1234?-v
nc:?connect?to?127.0.0.1?port?1230?(tcp)?failed:?Connection?refused
nc:?connect?to?127.0.0.1?port?1231?(tcp)?failed:?Connection?refused
nc:?connect?to?127.0.0.1?port?1232?(tcp)?failed:?Connection?refused
nc:?connect?to?127.0.0.1?port?1233?(tcp)?failed:?Connection?refused
Connection?to?127.0.0.1?1234?port?[tcp/*]?succeeded!
其中-n說明直接使用ip地址,而不使用域名,-z指定端口范圍,-v輸出詳細(xì)信息。從結(jié)果就可以看到,1234端口是可連接的。
TCP/UDP連接測(cè)試
當(dāng)你在學(xué)習(xí)TCP相關(guān)的內(nèi)容時(shí),是否想著如何自己實(shí)踐觀察里面的狀態(tài)或者數(shù)據(jù)包?雖然推薦自己去寫一個(gè)TCP連接的服務(wù)端-客戶端程序,但是也可以利用nc命令來完成,例如,在一個(gè)終端中輸入如下內(nèi)容:
$?nc?-l?1234
hello 編程珠璣
表明在1234端口監(jiān)聽,然后可以在另外一個(gè)終端進(jìn)行連接;
$?nc?127.0.0.1?1234hello 編程珠璣
連接本地地址1234端口,這個(gè)過程中就可以抓包,分析TCP的三次握手了。
除此之外,你還可以在建立好的連接之間發(fā)送消息(簡(jiǎn)單的聊天功能),讓你分析更多!
默認(rèn)情況,它創(chuàng)建的是TCP連接,而使用-u(UDP)參數(shù)可以測(cè)試UDP連通性。
$?nc?-v?-u?182.3.226.35?80
Connection?to?182.3.226.35?80?port?[udp/http]?succeeded!
除此之外,還有很多參數(shù)用于調(diào)試,例如:
-b 允許廣播消息
-D 開啟socket調(diào)試模式
-d 禁止從標(biāo)準(zhǔn)輸入讀取內(nèi)容
-k 客戶端退出后,保持連接
-v 顯示詳細(xì)信息
由于在后面的文章中還會(huì)借助nc來說明,因此這里不詳解介紹。
HTTP連接測(cè)試
例如查看HTTP頭信息:
$?nc??www.baidu.com?80
HEAD?/?HTTP/1.1
HTTP/1.1?302?Found
Connection:?Keep-Alive
Content-Length:?17931
Content-Type:?text/html
Date:?Sun,?23?Jun?2019?13:52:12?GMT
Etag:?"54d9748e-460b"
Server:?bfe/1.0.8.18
連接后,輸入HEAD / HTTP/1.1或HEAD / HTTP/1.0,然后輸入兩個(gè)回車,可查看web服務(wù)器相關(guān)信息。
數(shù)據(jù)傳輸
還是利用前面的連接,借助重定向符可以進(jìn)行文件傳輸,例如服務(wù)端監(jiān)聽,并把內(nèi)容輸出到out.txt:
$?nc?-l?1234?>?out.txt
而客戶端連接:
$?nc?127.0.0.1?1234?in.txt
這樣客戶端in.txt的內(nèi)容,就會(huì)傳輸?shù)給ut.txt
關(guān)于重定向,可參考《如何linux shell中的2 > &1》
當(dāng)然了,對(duì)于文件傳輸,scp命令能更好地完成這件事。如果你沒有其他辦法了,可以試試nc。
網(wǎng)絡(luò)測(cè)試
前面說到可以通過nc傳輸數(shù)據(jù),同樣如果我們想測(cè)試兩個(gè)主機(jī)間的網(wǎng)絡(luò)速度(當(dāng)然你可以利用iperf工具來完成這個(gè)工作),nc也是可以幫忙的:
#服務(wù)端監(jiān)聽:
$?nc?-vl?1234?>/dev/null
其中重定向到/dev/null,表示將數(shù)據(jù)丟棄。
然后在另一臺(tái)主機(jī)上執(zhí)行:
$?dd?if=/dev/zero?bs=1M?count=10?|nc?-vn?127.0.0.1?1234
Connection?to?127.0.0.1?1234?port?[tcp/*]?succeeded!
10+0?records?in
10+0?records?out
10485760?bytes?(10?MB,?10?MiB)?copied,?0.0333675?s,?314?MB/s
dd拷貝數(shù)據(jù),這里從/dev/zero拷貝數(shù)據(jù)0,且一次1M,拷貝10次,最后通過nc命令發(fā)送到服務(wù)端。結(jié)束后,就可以看到統(tǒng)計(jì)信息了。
總結(jié)
nc命令短小精悍,但在很多方面能夠幫助我們,例如:
端口掃描
連接測(cè)試
TCP/UDP服務(wù)端客戶端監(jiān)聽與連接
網(wǎng)絡(luò)測(cè)試
代理
nc命令的更多妙用等著你去探索!
推薦閱讀:
從 lsof 開始,深入理解 Linux 虛擬文件系統(tǒng)!
Sampler:Shell命令執(zhí)行可視化和告警工具
5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹莓派,等等。在公眾號(hào)內(nèi)回復(fù)「1024」,即可免費(fèi)獲取??!
