您正在看的網路通訊協定教程是:Telnet環境變數。
1.命令名和代碼
ENVIRON36
IS0
SEND1
INFO2
VAR0
VALUE1
ESC2
USERVAR3
2.命令含義
IACWILLENVIRON
這個命令的寄件者將發送環境變數。
IACWONTENVIRON
這個命令的寄件者拒絕發送環境變數。
IACDOENVIRON
這個命令的寄件者將接收環境變數。
IACDONTENVIRON
這個命令的寄件者拒絕接收環境變數。
IACSBENVIRONSEND[type...[type...[...]]]IACSE
這個命令的寄件者請求遠端發送它的環境變數。“type”既可以是VAR,也可以是
USERVAR,既用來指定周知變數名又用於指定使用者變數名。只有DOENVIRON端可以發
起一個SEND命令。如果指定了一個變數列表,那麼只能發送這些變數。如果沒有指定列
表,那麼就應該發送對所有的周知變數和使用者自訂變數都是預設的環境變數。如果有一個
變數沒有命名,那麼應該發送在預設環境中的所有類型的變數(周知或者使用者自訂的)。
IACSBENVIRONIStype...[VALUE...][type...[VALUE...][
這個命令的寄件者正在發送環境變數。發送這個命令來響應某個SEND請求。只有處
於WILLENVIRON狀態的一端可以發送一個IS命令。“type”/VALUE對必須按照和SEND
請求指定的順序相同的次序來返回,而且必須對每一個明確的“type...”請求都得響應。
“type”會是VAR或者USERVAR。可能發送多重環境變數。在一個“type”後一直到下
一個“type”或VALUE的特徵指定了變數名稱。Thecharactersfollowinga在一個VALUE
後一直到下一個“type”的特徵指定了變數的數值。如果一個“type”後面沒有跟一個
VALUE(例如,跟著其他的VAR、USERVAR或者IACSE),那麼對這個變數就沒有定義。
如果VALUE後面緊跟著一個“type”或者IAC,那麼這個變數已經定義了,但是沒有數值。
如果某個IAC包含在IS和IACSE中,那麼它必須當作IACIA來發送。如果某個變數或者
數值包含了一個VAR,那麼它必須當作ESCVAR來發送。
如果某個變數或者數值包含了一個USERVAR,那麼它必須當作ESCUSERVAR來發
送。如果一個變數或者數值包含了一個VALUE,那麼它必須當作ESCVALUE來發送。如
果某個變數或者數值包含了一個ESC,那麼它必須當作ESCESC來發送。
IACSBENVIRONINFOtype...[VALUE...][type...[VALUE...][
這個命令的寄件者正在發送有關已經變化了的環境變數的資訊。除了在命令中以INFO
替代了IS以外,和IS命令相同。只有處於WILLENVIRON狀態的一端可以發送一個INFO
命令。INFO命令不會用於發送初始化資訊;SEND/IS序列正是用在這種情況下。INFO命
令用於廣播環境變數的變化,而且可以很自然的就產生了。
3.預設規範
這個選項的預設規範是
WONTENVIRON
DONTENVIRON
意思是沒有任何環境資訊的交換。
4.動機
一些作業系統具有包含著當Telnet串連建立時廣播給遠端機器的資訊的啟動資訊和環
境變數。提出一些新的需要通過一個Telnet會話來廣播的資訊比每次建立一個新的Telnet
選項更可取,但是Telnet會話自身並不真正需要知道,就可以採用這種普通的資訊選項了。
5.周知變數
USER這個變數用於傳送用戶端想要登入的遠程系統上的使用者或者帳戶名稱。USER變
量的數值格式由系統決定,由遠程系統確定。
JOB這個變數用於傳送當登入進入遠程系統時用戶端想要使用的業務ID號。JOB
變數的數值格式由系統決定,由遠程系統確定。
ACCT這個變數用於傳送當登入進入遠程系統時用戶端想要使用的帳戶ID號。ACCT
變數的數值格式由系統決定,由遠程系統確定。
PRINTER這個變數用於確定印表機輸出的預設位置。因為現在在網路上沒有一種標
準的命名方法,所以目前這個變數的格式不明確。
SYSTEMTYPE這個是用於傳輸這個變數所用的作業系統的類型。它的數值和FTP[2]
中的SYSTEM(SYST)的取值相同。這個值的格式應該和在AssignedNumbers文檔[3]的當
前版本中列出的一個系統名稱的第一個詞一樣。
DISPLAY這個變數用於傳輸用戶端的X顯示位置。DISPLAY變數的數值格式如下:
<host>:<dispnum>[.<screennum>]
這個訊息和通過利用TelnetX-DISPLAY-LOCATION選項得到的資訊是相同。如果
DISPLAY環境變數收到的X-DISPLAY-LOCATION選項[4]以及它們包含的不一致資訊,應
該使用最近收到的資訊。
因為不可能預計到所有使用者想要交換的變數,提供了USERVAR類型來支援使用者傳輸
任意的變數/數值對。採用附加類型使得應用可以區分由遠端主機軟體得到的數值和由使用者
提供的數值。偏執些的實現很可能用同級的不信任度對待這兩種類型。周知變數和使用者變數
之間命名空間衝突的結果是規範應用。
6.應用規則
WILL和DO僅僅用在串連開始時捕獲和承認將來協商的結果。
一旦兩個主機已經交換了一個WILL命令和DO命令,DOENVIRON的寄件者就可以
自由的請求發送環境變數。一旦DO的寄件者可以發送請求(IACSBENVIRONSENDIAC
SE),那麼WILL的寄件者就可以傳輸現行的環境變數資訊(通過IACSBENVIRONIS...IAC
SE命令)。雖然有時這個選項在整個TELNET串連的過程中都可以使用,但是環境資訊交
換還是常常出現在串連啟動時。這是因為許多作業系統只具有在過程建立時才傳輸環境資訊
的機制,所以在使用者登入前這些資訊是必須的。在這一節中,任何引用的事情都是以速記方
式對ASCII數值字串的進行記錄的。例如,“joe”意思是三個八位十進位序列106111101。
接收主機不需要把它從環境中接收到的所有的變數都上傳。例如,如果客戶機將要通過
發送USERVAR“TERM”VALUE“xterm”這個環境變數來發送時,TERMINAL-TYPE
[1]選項已經用於確定終端類型,伺服器就可以忽略TERM變數。同樣,一些啟動資訊也可
以用於其他方面;例如,“USER”、“ACCT”和“PROJ”變數的數值可以用來判斷哪一個
帳戶已經登入,而且可能從未被上傳給使用者環境。通常,如果伺服器通過一些更精確的方法
已經檢測到某個環境變數的數值,或者如果它不能理解某個變數名稱,它將忽略在
ENVIRON選項中發送的數值。伺服器可能也更喜歡僅僅把所有未知資訊上傳到使用者的環境
中。這是應用中建議的方法,因為它使使用者使用起來更加靈活。
以下是一個這個選項的使用範例:
Host1Host2
IACDOENVIRON
IACWILLENVIRON
[現在主機1可以自由的請求環境變數了]
IACSBENVIRONSENDVAR"USER"
VAR"ACCT"VARUSERVARIACSE
[現在,伺服器明確請求得到USER和ACCT變數、周知環境變數的預設設定和使用者
自訂變數的預設設定。注意:用戶端兩次引用了USER資訊;一次是因為它明確請求的,
另一次是因為它是預設環境的一部分。]
IACSBENVIRONISVAR"USER"
VALUE"joe"VAR"ACCT"VALUE
"kernel"VAR"USER"VALUE"joe"
VAR"DISPLAY"VALUE"foo:0.0"
USERVAR"SHELL"VALUE"/bin/csh"
IACS
您正在看的網路通訊協定教程是:Telnet環境變數。E
當現在定義了使用者變數或者不明確的變數時,對於響應空環境(在IACSB和IACSE中
都沒有資料)的用戶端,那是合法的。例如:
IACSBENVIRONISIACSE
對下列任何都是有效響應:
IACSBENVIRONSENDIACSE
IACSBENVIRONSENDVARIACSE
IACSBENVIRONSENDUSERVARIACSE
IACSBENVIRONSENDVARUSERVARIACSE
(最後的範例和第一個相同...)
預計,支援TelnetENVIRON選項的任何應用都將完全支援這個規範。
7.涉及的安全問題
對ENVIRON選項的實施者重要的是理解設定選項的互動性和邏輯/證明過程。應該非
常仔細的分析哪個變數在設定客戶登入時是“安全的”。一個錯誤選項的例子將會改一個參
數,允許入侵者廢止或損害登入/證明程式本身。