Netcat中文版是一款非常好用的網(wǎng)絡(luò)測(cè)試工具,我們可以通過(guò)使用Netcat for windows來(lái)建立TCP和UDP連接,同時(shí)還可以對(duì)各種端口上的連接請(qǐng)求進(jìn)行監(jiān)測(cè),從而確保自己電腦網(wǎng)絡(luò)的安全。
軟件簡(jiǎn)介
NetCat,簡(jiǎn)稱(chēng)Nc,是一款非常實(shí)用的網(wǎng)絡(luò)工具,他它能夠建立并接受傳輸控制協(xié)議(TCP)和用戶(hù)數(shù)據(jù)報(bào)協(xié)議(UDP)的連接,小巧而功能強(qiáng)大,被譽(yù)為網(wǎng)絡(luò)安全界的“瑞士軍刀”。NetCat被設(shè)計(jì)成一個(gè)可靠的后端(back-end) 工具,擁有功能豐富的網(wǎng)絡(luò)調(diào)試和開(kāi)發(fā)工具,它可以通過(guò)手工或者腳本與應(yīng)用層的網(wǎng)絡(luò)應(yīng)用程序或服務(wù)進(jìn)行交互,可以幫你輕易的建立幾乎任何類(lèi)型的連接。同時(shí)還可以當(dāng)服務(wù)器使用,能監(jiān)聽(tīng)任意指定端口的連接請(qǐng)求(inbound connection ),并可做同樣的讀寫(xiě)操作。

netcat軟件特色
*支持連出和連入(outbound and inbound connection),TCP和UDP,任意源和目的端口
*全部DNS正向/反向檢查,給出恰當(dāng)?shù)木?/p>
*使用任何源端口
*使用任何本地設(shè)置的網(wǎng)絡(luò)資源地址
*內(nèi)建端口掃描功能,帶有隨機(jī)數(shù)發(fā)生器
*內(nèi)建loose source-routing功能
*可能標(biāo)準(zhǔn)輸入讀取命令行參數(shù)
*慢發(fā)送模式,每N秒發(fā)送一行
*以16進(jìn)制顯示傳送或接收的數(shù)據(jù)
*允許其它程序服務(wù)建立連接
*對(duì)Telnet應(yīng)答
netcat參數(shù)介紹
nc.exe -h即可看到各參數(shù)的使用方法。
基本格式:nc [-options] hostname port[s] [ports] ...
nc -l -p port [options] [hostname] [port]
-d 后臺(tái)模式
-e prog 程序重定向,一旦連接,就執(zhí)行 [危險(xiǎn)!!]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h 幫助信息
-i secs 延時(shí)的間隔
-l 監(jiān)聽(tīng)模式,用于入站連接
-L 連接關(guān)閉后,仍然繼續(xù)監(jiān)聽(tīng)
-n 指定數(shù)字的IP地址,不能用hostname
-o file 記錄16進(jìn)制的傳輸
-p port 本地端口號(hào)
-r 隨機(jī)本地及遠(yuǎn)程端口
-s addr 本地源地址
-t 使用TELNET交互方式
-u UDP模式
-v 詳細(xì)輸出--用兩個(gè)-v可得到更詳細(xì)的內(nèi)容
-w secs timeout的時(shí)間
-z 將輸入輸出關(guān)掉--用于掃描時(shí)
端口的表示方法可寫(xiě)為M-N的范圍格式。
netcat使用實(shí)例
1、端口掃描
端口掃描經(jīng)常被系統(tǒng)管理員和黑客用來(lái)發(fā)現(xiàn)在一些機(jī)器上開(kāi)放的端口,幫助他們識(shí)別系統(tǒng)中的漏洞。
nc -z -v -n 172.31.100.7 21-25
可以運(yùn)行在TCP或者UDP模式,默認(rèn)是TCP,-u參數(shù)調(diào)整為udp.
z 參數(shù)告訴netcat使用0 IO,連接成功后立即關(guān)閉連接, 不進(jìn)行數(shù)據(jù)交換
v 參數(shù)指使用冗余選項(xiàng)(譯者注:即詳細(xì)輸出)
n 參數(shù)告訴netcat 不要使用DNS反向查詢(xún)IP地址的域名
這個(gè)命令會(huì)打印21到25 所有開(kāi)放的端口。Banner是一個(gè)文本,Banner是一個(gè)你連接的服務(wù)發(fā)送給你的文本信息。當(dāng)你試圖鑒別漏洞或者服務(wù)的類(lèi)型和版本的時(shí)候,Banner信息是非常有用的。但是,并不是所有的服務(wù)都會(huì)發(fā)送banner。
一旦你發(fā)現(xiàn)開(kāi)放的端口,你可以容易的使用netcat 連接服務(wù)抓取他們的banner。
nc -v 172.31.100.7 21
netcat 命令會(huì)連接開(kāi)放端口21并且打印運(yùn)行在這個(gè)端口上服務(wù)的banner信息。
二、Chat Server
假如你想和你的朋友聊聊,有很多的軟件和信息服務(wù)可以供你使用。但是,如果你沒(méi)有這么奢侈的配置,比如你在計(jì)算機(jī)實(shí)驗(yàn)室,所有的對(duì)外的連接都是被限制的,你怎樣和整天坐在隔壁房間的朋友溝通那?不要郁悶了,netcat提供了這樣一種方法,你只需要?jiǎng)?chuàng)建一個(gè)Chat服務(wù)器,一個(gè)預(yù)先確定好的端口,這樣子他就可以聯(lián)系到你了。
Server:
nc -l 1567
netcat 命令在1567端口啟動(dòng)了一個(gè)tcp 服務(wù)器,所有的標(biāo)準(zhǔn)輸出和輸入會(huì)輸出到該端口。輸出和輸入都在此shell中展示。
Client:
nc 172.31.100.7 1567
不管你在機(jī)器B上鍵入什么都會(huì)出現(xiàn)在機(jī)器A上。
3、文件傳輸
大部分時(shí)間中,我們都在試圖通過(guò)網(wǎng)絡(luò)或者其他工具傳輸文件。有很多種方法,比如FTP,SCP,SMB等等,但是當(dāng)你只是需要臨時(shí)或者一次傳輸文件,真的值得浪費(fèi)時(shí)間來(lái)安裝配置一個(gè)軟件到你的機(jī)器上嘛。假設(shè),你想要傳一個(gè)文件file.txt 從A 到B。A或者B都可以作為服務(wù)器或者客戶(hù)端,以下,讓A作為服務(wù)器,B為客戶(hù)端。
Server:
nc -l 1567 < file.txt
Client:
nc -n 172.31.100.7 1567 > file.txt
這里我們創(chuàng)建了一個(gè)服務(wù)器在A上并且重定向netcat的輸入為文件file.txt,那么當(dāng)任何成功連接到該端口,netcat會(huì)發(fā)送file的文件內(nèi)容。
在客戶(hù)端我們重定向輸出到file.txt,當(dāng)B連接到A,A發(fā)送文件內(nèi)容,B保存文件內(nèi)容到file.txt.沒(méi)有必要?jiǎng)?chuàng)建文件源作為Server,我們也可以相反的方法使用。像下面的我們發(fā)送文件從B到A,但是服務(wù)器創(chuàng)建在A上,這次我們僅需要重定向netcat的輸出并且重定向B的輸入文件。
B作為Server
Server:
nc -l 1567 > file.txt
Client:
nc 172.31.100.23 1567 < file.txt
4、目錄傳輸
發(fā)送一個(gè)文件很簡(jiǎn)單,但是如果我們想要發(fā)送多個(gè)文件,或者整個(gè)目錄,一樣很簡(jiǎn)單,只需要使用壓縮工具tar,壓縮后發(fā)送壓縮包,如果你想要通過(guò)網(wǎng)絡(luò)傳輸一個(gè)目錄從A到B。
Server:
tar -cvf – dir_name | nc -l 1567
Client:
nc -n 172.31.100.7 1567 | tar -xvf -
這里在A服務(wù)器上,我們創(chuàng)建一個(gè)tar歸檔包并且通過(guò)-在控制臺(tái)重定向它,然后使用管道,重定向給netcat,netcat可以通過(guò)網(wǎng)絡(luò)發(fā)送它。在客戶(hù)端我們下載該壓縮包通過(guò)netcat 管道然后打開(kāi)文件。如果想要節(jié)省帶寬傳輸壓縮包,我們可以使用bzip2或者其他工具壓縮。
Server:
tar -cvf – dir_name| bzip2 -z | nc -l 1567
通過(guò)bzip2壓縮
Client:
nc -n 172.31.100.7 1567 | bzip2 -d |tar -xvf -
使用bzip2解壓
5. 加密你通過(guò)網(wǎng)絡(luò)發(fā)送的數(shù)據(jù)如果你擔(dān)心你在網(wǎng)絡(luò)上發(fā)送數(shù)據(jù)的安全,你可以在發(fā)送你的數(shù)據(jù)之前用如mcrypt的工具加密。
Server:
nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > file.txt
使用mcrypt工具加密數(shù)據(jù)。
Client:
mcrypt –flush –bare -F -q -m ecb < file.txt | nc -l 1567
使用mcrypt工具解密數(shù)據(jù)。
以上兩個(gè)命令會(huì)提示需要密碼,確保兩端使用相同的密碼。這里我們是使用mcrypt用來(lái)加密,使用其它任意加密工具都可以。
6、流視頻
雖然不是生成流視頻的最好方法,但如果服務(wù)器上沒(méi)有特定的工具,使用netcat,我們?nèi)匀挥邢M龀蛇@件事。
Server:
cat video.avi | nc -l 1567
這里我們只是從一個(gè)視頻文件中讀入并重定向輸出到netcat客戶(hù)端
Client:
nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -
這里我們從socket中讀入數(shù)據(jù)并重定向到mplayer。
7、克隆一個(gè)設(shè)備
如果你已經(jīng)安裝配置一臺(tái)Linux機(jī)器并且需要重復(fù)同樣的操作對(duì)其他的機(jī)器,而你不想在重復(fù)配置一遍。不在需要重復(fù)配置安裝的過(guò)程,只啟動(dòng)另一臺(tái)機(jī)器的一些引導(dǎo)可以隨身碟和克隆你的機(jī)器。
克隆Linux PC很簡(jiǎn)單,假如你的系統(tǒng)在磁盤(pán)/dev/sda上
Server:
dd if=/dev/sda | nc -l 1567
Client:
nc -n 172.31.100.7 1567 | dd of=/dev/sda
dd是一個(gè)從磁盤(pán)讀取原始數(shù)據(jù)的工具,我通過(guò)netcat服務(wù)器重定向它的輸出流到其他機(jī)器并且寫(xiě)入到磁盤(pán)中,它會(huì)隨著分區(qū)表拷貝所有的信息。但是如果我們已經(jīng)做過(guò)分區(qū)并且只需要克隆root分區(qū),我們可以根據(jù)我們系統(tǒng)root分區(qū)的位置,更改sda 為sda1,sda2.等等。
8、打開(kāi)一個(gè)shell
我們已經(jīng)用過(guò)遠(yuǎn)程shell-使用telnet和ssh,但是如果這兩個(gè)命令沒(méi)有安裝并且我們沒(méi)有權(quán)限安裝他們,我們也可以使用netcat創(chuàng)建遠(yuǎn)程shell。假設(shè)你的netcat支持 -c -e 參數(shù)(默認(rèn) netcat)
Server:
nc -l 1567 -e /bin/bash -i
Client:
nc 172.31.100.7 1567
這里我們已經(jīng)創(chuàng)建了一個(gè)netcat服務(wù)器并且表示當(dāng)它連接成功時(shí)執(zhí)行/bin/bash
假如netcat 不支持-c 或者 -e 參數(shù)(openbsd netcat),我們?nèi)匀荒軌騽?chuàng)建遠(yuǎn)程shell
Server:
mkfifo /tmp/tmp_fifo
cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo
這里我們創(chuàng)建了一個(gè)fifo文件,然后使用管道命令把這個(gè)fifo文件內(nèi)容定向到shell 2>&1中。是用來(lái)重定向標(biāo)準(zhǔn)錯(cuò)誤輸出和標(biāo)準(zhǔn)輸出,然后管道到netcat 運(yùn)行的端口1567上。至此,我們已經(jīng)把netcat的輸出重定向到fifo文件中。
說(shuō)明:
從網(wǎng)絡(luò)收到的輸入寫(xiě)到fifo文件中
cat 命令讀取fifo文件并且其內(nèi)容發(fā)送給sh命令
sh命令進(jìn)程受到輸入并把它寫(xiě)回到netcat。
netcat 通過(guò)網(wǎng)絡(luò)發(fā)送輸出到client
至于為什么會(huì)成功是因?yàn)楣艿朗姑钇叫袌?zhí)行,fifo文件用來(lái)替代正常文件,因?yàn)閒ifo使讀取等待而如果是一個(gè)普通文件,cat命令會(huì)盡快結(jié)束并開(kāi)始讀取空文件。在客戶(hù)端僅僅簡(jiǎn)單連接到服務(wù)器
Client:
nc -n 172.31.100.7 1567
你會(huì)得到一個(gè)shell提示符在客戶(hù)端
9、反向shell
反向shell是指在客戶(hù)端打開(kāi)的shell。反向shell這樣命名是因?yàn)椴煌谄渌渲茫@里服務(wù)器使用的是由客戶(hù)提供的服務(wù)。
Server:
nc -l 1567
在客戶(hù)端,簡(jiǎn)單地告訴netcat在連接完成后,執(zhí)行shell。
Client:
nc 172.31.100.7 1567 -e /bin/bash
現(xiàn)在,什么是反向shell的特別之處呢
反向shell經(jīng)常被用來(lái)繞過(guò)防火墻的限制,如阻止入站連接。例如,我有一個(gè)專(zhuān)用IP地址為172.31.100.7,我使用代理服務(wù)器連接到外部網(wǎng)絡(luò)。如果我想從網(wǎng)絡(luò)外部訪(fǎng)問(wèn) 這臺(tái)機(jī)器如1.2.3.4的shell,那么我會(huì)用反向外殼用于這一目的。
10、指定源端口
假設(shè)你的防火墻過(guò)濾除25端口外其它所有端口,你需要使用-p選項(xiàng)指定源端口。
Server:
nc -l 1567
Client:
nc 172.31.100.7 1567 -p 25
使用1024以?xún)?nèi)的端口需要root權(quán)限。該命令將在客戶(hù)端開(kāi)啟25端口用于通訊,否則將使用隨機(jī)端口。
11、指定源地址
假設(shè)你的機(jī)器有多個(gè)地址,希望明確指定使用哪個(gè)地址用于外部數(shù)據(jù)通訊。我們可以在netcat中使用-s選項(xiàng)指定ip地址。
Server:
nc -u -l 1567 < file.txt
Client:
nc -u 172.31.100.7 1567 -s 172.31.100.5 > file.txt
該命令將綁定地址172.31.100.5。
12、這僅僅是使用netcat的一些示例。
其它用途有:
使用-t選項(xiàng)模擬Telnet客戶(hù)端,
HTTP客戶(hù)端用于下載文件,
連接到郵件服務(wù)器,使用SMTP協(xié)議檢查郵件,
使用ffmpeg截取屏幕并通過(guò)流式傳輸分享等等,其它更多用途。