发新话题
打印

[转载]TELNET二进制传输

[转载]TELNET二进制传输

信息来源:邪恶八进制信息安全团队(www.eviloctal.com

1. 命令和代码

TRANSMIT-BINARY 0

2. 命令意义

IAC WILL TRANSMIT-BINARY

发送主请求开始传输,或确定现在要传输的数据在接收方会以二进制方式解释。

IAC WON'T TRANSMIT-BINARY
如果连接已在二进制方式下,发送此命令要求接收方恢复原来标准的NVT ASCII方式解释数据。如果现在就未在二进制方式下,发送方拒绝传输将被解释为二进制的数据,仍然要求按现在方式进行传输。只有当双方均同意的情况下才有可能进行二进制传输。
IAC DO TRANSMIT-BINARY
发送者要求传输数据,或确定数据将要被传输,这些数据均被解释为二进制的。
IAC DON'T TRANSMIT-BINARY
如果现在处于二进制状态下,命令发送方要求数据发送方进行标准的NTV ASCII的传输。如果连接未在二进制状态下,发出命令者要求数据发送方按现在的状态发送数据。只有当双方均同意的情况下才有可能进行二进制传输。
3. 默认情况

默认情况为:WON'T TRANSMIT-BINARY和DON'T TRANSMIT-BINARY,连接未在二进制状态下。

4. 选项出现的原因

有时候利用telnet上的二进制传输会更有效率,这就是出现的根本原因吧。而双方只要把对数据的解释方式加以改变就可以完成这一选项,因此也比较方便。

5. 选项描述

开始二进制传输后,接收方对没有IAC开始的数据以二进制进行解释。IAC后面的是标准的TELNET命令。如果IAC后面的命令不可识别,它和IAC NOP命令的效果一样。

6. 实现问题

实现二进制传输则不能进行其它模式的传输,这是不避免的。如果双方能够理解,则不会出现什么问题。我们看到上面的命令意义解释可以注意到WON'T和DON'T的意义要看现在是不是处于二进制传输模式下,假设现在处于EBCDIC模式下,而且一方也不知道任何二进制传输的命令,如果它接收到DO TRANSMIT-BINARY,它根本不知道这是什么,因此返回WON'T TRANSMIT-BINARY,如果对于WON'T TRANSMIT-BINARY的默认值是NVT ASCII,发送DO TRANSMIT-BINARY可能希望接收方转到NVT ASCII,但接收DO TRANSMIT-BINARY的一方有可能不这么做。

因此,当连接不处于二进制状态时,默认值是维持现状。当连接处于二进制状态时,这规则就不顶用了。这就要求连接双方维持一个保存所有可用的连接状态的栈,这样才能正确解释WON'T和DON'T。在二进制状态下,WON'T和DON'T会使状态返回NVT ASCII。因为telnet是一个双向的通道,因此必须保证双向的数据流都是二进制的。在实现时遵守防止循环的规则,这一规则在telnet协议中有描述。下面我们看看从一个进程和终端开始或接收二进制传输的情况:

a. 从终端开始二进制传输

实现者应该考虑在二进制状态下如何产生8位有效数据,其中不带什么校验位之类的东西。

b. 二进制传输到进程

实现者应该考虑在二进制状态下进行如何接收所有的二进制数据。例如TOPS-20会在终端级解释一些特定字符,而不在进行级。

c. 从进行开始的二进制传输

实现者应该考虑传输的字符如何不对对方的终端解释为其它的字符。例如TOPS-20会将非打印字符转为一个箭头和一个可打印字符。

d. 二进制传输到终端

实现者应该考虑接收到的数据如何传送到本地终端。包括本地应该加入的一些字符,校验运算或字符转换。

TOP

发新话题