永继研究室

文档-资料-开源

Flash终端

Telnet是Internet远程登陆服务的标准协议,它位于网路协议的应用层。

VT100是Telnet支持较普遍的一种模拟终端类型。

为了方便的在网页上管理各个服务器,我们用FLASH写了一个VT100模拟终端。

首先,连接对方的Telnet要知道对方的域名(IP)和端口(23),之后以SOCKET方式连接:

private var _socket:Socket = new Socket(host,port);

如连接本机:

private var _socket:Socket = new Socket(“127.0.0.1”,”23”);

之后,连接成功后对方Telnet会返回一组协商命令。

所谓协商命令,是远端Telnet和本地模拟终端之间的一些基本协定,如终端窗口大小、终端类型、回显等协商。基本流程如下:

远端要求终端提供终端类型,终端确认可以提供,远端收到终端可以提供的确认信息后,

再要求终端提供具体的终端类型,终端把具体类型(VT100)发送给远端。

如何确定数据流中返回的是协商命令而不是其他。协商命令总是以0XFF(我们称之为解释命令IAC)开头,当我们在字节流中读取到0XFF时,之后的几个字节就是具体的协商内容。

紧接着0XFF的一个字节是命令字节,由下表列出:

表1   TELNET 命令

名称

编码

说明

EOF

236

文件结束符

SUSP

237

挂起当前进程

ABORT

238

中止进程

EOR

239

记录结束符

SE

240

子选项结束

NOP

241

空操作

DM

242

数据标记

BRK

243

终止符(break)

IP

244

终止进程

AO

245

终止输出

AYT

246

请求应答

EC

247

终止符

EL

248

擦除一行

GA

249

继续

SB

250

子选项开始

WILL

251

选项协商

WONT

252

选项协商

DO

253

选项协商

DONT

254

选项协商

IAC

255

字符0XFF

命令字节之后是协商选项,如终端类型、窗口大小等,列表如下:

表2   TELNET 选项代码

选项标识

名称

RFC

1

回应(echo)

857

3

禁止继续

858

5

状态

859

6

时钟标识

860

24

终端类型

1,091

31

窗口大小

1,073

32

终端速率

1,079

33

远端流量控制

1,372

34

行模式

1,184

36

环境变量

1,408

以刚才确认终端类型为例:

远端发送:IAC DO 24 终端回应:IAC WILL 24

远端再发送: IAC SB 24 1 IAC SE 终端回应具体类型: IAC SB 24 0 “VT100” IAC SE

字节表示:

远端:255 253 24   终端:255 251 24

远端:255 250 24 1 255 240终端:255 250 24 0 86 84 49 48 48 255 240

AS3代码:

终端确认:

                            var tmp:ByteArray = new ByteArray();

           tmp.writeByte(255);

           tmp.writeByte(251);

           tmp.writeByte(24);

                            _socket.writeBytes($tmp);

           _socket.flush();

终端返回终端(VT100)类型:

                            var tmp:ByteArray = new ByteArray();

           tmp.writeByte(255);

           tmp.writeByte(250);

           tmp.writeByte(24);

           tmp.writeByte(0);

           tmp.writeMultiByte(“VT100″,“UTF-8″);

           tmp.writeByte(255);

           tmp.writeByte(240);

           _socket.writeBytes($tmp);

           _socket.flush();

 

所有的协商命令就这样应答,要注意的是,远端发送过来的 DO 命令,也就是字节253,一定要回应,用WILL或者WONT,否则无法登录。

最后,协商完成。怎么样才算协商完成,就是回应了所有远端Telnet的DO命令。这时,远端Telnet会返回ASCII的字符串提示登录,之后每按一个字符并发送,远端就会回显,直到发送字符(”\r\n”),登录名确定。同样要求输入密码直到(”\r\n”),这里安全起见,密码并不回显,正确可登录远端主机。WINOWSXP是在填入正确的密码后,远端才要求终端类型,要记得回应。

发表评论