很牛的netcat

原文鏈接:
http://www.oschina.net/translate/linux-netcat-command
下文僅摘抄部分有用的例子
1.Chat Server

假如你想和你的朋友聊聊,有很多的軟件和信息服務可以供你使用。但是,如果你沒有這麼奢侈的配置,比如你在計算機實驗室,所有的對外的連接都是被限制的,你怎樣和整天坐在隔壁房間的朋友溝通那?不要鬱悶了,netcat提供了這樣一種方法,你只需要創建一個Chat服務器,一個預先確定好的端口,這樣子他就可以聯繫到你了。
Server
ncl1567netcat1567tcpshellClient nc 172.31.100.7 1567
不管你在機器B上鍵入什麼都會出現在機器A上。

2.文件傳輸

大部分時間中,我們都在試圖通過網絡或者其他工具傳輸文件。有很多種方法,比如FTP,SCP,SMB等等,但是當你只是需要臨時或者一次傳輸文件,真的值得浪費時間來安裝配置一個軟件到你的機器上嘛。假設,你想要傳一個文件file.txt 從A 到B。A或者B都可以作爲服務器或者客戶端,以下,讓A作爲服務器,B爲客戶端。
Server
ncl1567<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

3.目錄傳輸

發送一個文件很簡單,但是如果我們想要發送多個文件,或者整個目錄,一樣很簡單,只需要使用壓縮工具tar,壓縮後發送壓縮包。
如果你想要通過網絡傳輸一個目錄從A到B。
Server
tarcvfdirname|ncl1567Client nc -n 172.31.100.7 1567 | tar -xvf -
這裏在A服務器上,我們創建一個tar歸檔包並且通過-在控制檯重定向它,然後使用管道,重定向給netcat,netcat可以通過網絡發送它。
在客戶端我們下載該壓縮包通過netcat 管道然後打開文件。
如果想要節省帶寬傳輸壓縮包,我們可以使用bzip2或者其他工具壓縮。
Server
tarcvfdirname|bzip2z|ncl1567bzip2Client nc -n 172.31.100.7 1567 | bzip2 -d |tar -xvf -
使用bzip2解壓

  1. 加密你通過網絡發送的數據

如果你擔心你在網絡上發送數據的安全,你可以在發送你的數據之前用如mcrypt的工具加密。
服務端
nclocalhost1567|mcryptflushbareFqdmecb>file.txt使mcrypt mcrypt –flush –bare -F -q -m ecb < file.txt | nc -l 1567
使用mcrypt工具解密數據。
以上兩個命令會提示需要密碼,確保兩端使用相同的密碼。
這裏我們是使用mcrypt用來加密,使用其它任意加密工具都可以。

  1. 流視頻

雖然不是生成流視頻的最好方法,但如果服務器上沒有特定的工具,使用netcat,我們仍然有希望做成這件事。
服務端
catvideo.avi|ncl1567netcat nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -
這裏我們從socket中讀入數據並重定向到mplayer。

6,克隆一個設備

如果你已經安裝配置一臺Linux機器並且需要重複同樣的操作對其他的機器,而你不想在重複配置一遍。不在需要重複配置安裝的過程,只啓動另一臺機器的一些引導可以隨身碟和克隆你的機器。
克隆Linux PC很簡單,假如你的系統在磁盤/dev/sda上
Server
ddif=/dev/sda|ncl1567Client nc -n 172.31.100.7 1567 | dd of=/dev/sda
dd是一個從磁盤讀取原始數據的工具,我通過netcat服務器重定向它的輸出流到其他機器並且寫入到磁盤中,它會隨着分區表拷貝所有的信息。但是如果我們已經做過分區並且只需要克隆root分區,我們可以根據我們系統root分區的位置,更改sda 爲sda1,sda2.等等。

7,打開一個shell

我們已經用過遠程shell-使用telnet和ssh,但是如果這兩個命令沒有安裝並且我們沒有權限安裝他們,我們也可以使用netcat創建遠程shell。
假設你的netcat支持 -c -e 參數(默認 netcat)
Server
ncl1567e/bin/bashiClient nc 172.31.100.7 1567
這裏我們已經創建了一個netcat服務器並且表示當它連接成功時執行/bin/bash
假如netcat 不支持-c 或者 -e 參數(openbsd netcat),我們仍然能夠創建遠程shell
Server
mkfifo/tmp/tmpfifo 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

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