我們知道用linux命令rz/sz可以通過一些終端軟體如secureCRT等在linux伺服器與本地windows之間傳文件。在伺服器上rz一下,在本地windows下就跳出一個視窗,選擇文件後就傳到了伺服器上;而在伺服器上用sz命令sz一個文件,在本地電腦硬碟上就有了這個文件。用起來是很方便,但是 ...
我們知道用linux命令rz/sz可以通過一些終端軟體如secureCRT等在linux伺服器與本地windows之間傳文件。在伺服器上rz一下,在本地windows下就跳出一個視窗,選擇文件後就傳到了伺服器上;而在伺服器上用sz命令sz一個文件,在本地電腦硬碟上就有了這個文件。用起來是很方便,但是總感覺很神奇。 關於其可能的工作原理,之前猜測過,感覺是這樣:用secureCRT等遠程登錄的時候,其實就是通過ssh方式,連接了遠程主機上的sshd,也就是相當於用sshd-client 在於sshd 交互而已,而這個sshd-client就是secureCRT;這樣,sz/rz工作的時候,也只能是通過這條通路。具體怎樣通過這條通路傳的,大概是這樣:sz 一個文件的時候,就像是cat 一個文件一樣,本來應該在本地視窗顯示出一堆亂碼,但是正巧這堆亂碼符合某種格式(就是zModem這種sz/rz所採用的協議格式),被secureCRT識破了,認出了其實是sz命令發起的,於是保存成本地一個文件。換句話說,如果一個文件內容正好是這樣的內容,那麼cat出後,在本地也必然會保存出一個文件的。對於rz呢,也是同樣的道理,rz 執行後直接往標準輸出列印一些內容,這些內容格式古怪,正好被secureCRT所識別出來,然後彈窗,並把本地文件傳過去,就像是用戶的鍵入內容一樣被rz命令接收。
這隻是猜測,具體不很明瞭。但是通過做了幾個實驗,發現差不多是這個意思。我登上了A,然後ssh跳到了B,再ssh跳到了C,然後在C上做sz/rz操作,發現B機器上的網卡流量急劇變大,而sz/rz操作結束後,B機器上的網卡流量又恢復正常。那麼說明這個文件傳輸肯定是通過上面所說的通道的。
致於上面分析的更細節內容,用 strace rz 看了下,然後發現一些可疑的地方,然後總結出了以下一句命令:
echo -e '**\30B0100000023be50\r\212\21';
會發現,在secureCRT上跳出了文件上傳對話框。這說明上面分析是對的。