Telnet服务端协商机制

 
       Telnet 是标准的提供远程登陆功能的应用。它能够运行在不同的操作系统的主机之间。 Telnet 通过客户进程和服务器进程之间的选项协商机制,从而确定通信双方可以提供的功能特性。
  ( 1 Telnet 客户进程同时和终端客户及 TCP/IP 协议模块进行交互。通常我们所键入的任何信息的传输是通过 TCP 连接,连接的任何返回信息都输出到终端上。
  ( 2 Telnet 服务器进程经常要和 " 伪终端设备 " 打交道。
  ( 3 仅仅使用了一条 TCP 连接。
   1 协议介绍:
  一种通用字符终端叫网络虚拟终端 NVT ,连接的客户机和服务器,都必须把他们的物理终端和 NVT 进行相互转换。不管客户进程终端是什么类型,操作系统必须把它转换 NVT 格式,同时,不管服务器进程的终端是什么类型,操作系统必须能够将 NVT 格式转换为终端所能够接收的格式。
   (1) NVT ASCII
   NVT ASCII 代表 7 位的 ASCII 字符集,网间协议族都使用 NVT ASCII , 每个 7 位的字符都以 8 位格式发送,最高位为 0 。行结束符以两个字符 CR (回车)和紧接着的 LF (换行)这样的序列表示以 /r/n 表示。单独的一个 CR 表示为 /r/0
  ( 2 Telnet 命令:
  命令以字节 0xff 开头,后面的一个字节是命令字节。如果要发送数据 255 ,就必须连续发送两个 255 (设置选项才可以发送)。
 
名称
代码( 10 进制)
描述
EOF
236
文件结束符
SUSP
237
挂起当前进程
ABORT
238
异常终止进程
EOR
239
记录结束符
SE
240
子选项结束
NOP
241
无操作
DM
242
数据标志
BRK
243
中断
IP
244
中断进程
AO
245
异常终止输出
AYT
246
对方是否还在运行
EC
247
转义字符
EL
248
删除行
GA
249
继续进行
SB
250
子选项开始
WILL
251
选项协商
WONT
252
选项协商
DO
253
选项协商
DONT
254
选项协商
IAC
255
数据字节 255
    4 协商选项
   Telnet 连接双方首先进行交互的信息是选项协商数据。选项协商是对称的,也就是说任何一方都可以主动发送选项协商请求给对方。
   WILL :发送方将激活 enable 选项。
   DO :发送方想叫接收端激活选项
   WONT :发送方本身想禁止选项
   DON''T :发送方想让接收端去禁止选项。
  对于激活选项请求,有权同意或不同意。而对于使选项失效请求,必须同意。
选项协商需要 3 个字节,一个 IAC 字节 (0xff) ,接着一个字节是 WILL DO WONT DON''T 四者之一,最后一个 ID 字节指明激活或禁止选项。
 
选项标识( 10 进制)
名称
1
回显
3
抑制继续进行
5
状态
6
定时标记
24
终端类型
31
窗口大小
32
终端速率
33
远程流量控制
34
行方式
36
环境变量
5 子选项协商
  以指定终端类型为例。首先连接的一方发送 3 个字节的字符序列来请求激活该选项: <IAC,WILL,24> ,如果收端同意,那么响应数据就是 <IAC,DO,24> ,然后服务器进程再发送如下字符串 <IAC,SB,24,1,IAC,SE> ,该字符串询问客户进程的终端类型。 SB 是子选项协商的其实命令标记, 24 表示这是终端类型选项的子选项, 1 表示发送你的终端类型,子选项协商的结束命令标记也是 IAC SE 。如果终端类型是 ibmpc ,客户的响应将是 <IAC,SB,24,0 ''I'',''B'',''M'',''P'',''C'',IAC,SE> ,其中 0 表示我的终端类型是。
  ( 6 半双工、一次一字符、一次一行或行方式
   半双工: NVT 默认是一个半双工设备,在接收用户输入之前,它必须从服务器进程获得 GA 命令。用户的输入在本地回显,方向是从 NVT 键到 NVT 打印机,所以客户进程到服务器进程只能发送整行的数据。
   一次一字符:每一个键入的字符都单独发送到服务器进程,服务器进程回显大多数的字符。
   一次一行:准行方式,带远程回显的一次一个字符。
   行方式:客户进程和服务器进程协商确定。
  ( 7 同步信号
   Telnet Data Mark(DM) 命令作为同步信号,该同步信号是以 TCP 紧急数据形式发送的。 DM 命令是随数据流传输的同步标记,它告诉收端回到正常的处理进程上来。当一端收到随访已进入紧急方式的通知后,它将开始读数据,一边读一边丢弃数据,直到读到 Telnet 命令紧急数据的最后一个字节就是 DM 字节。
  ( 8 客户的转义符号
   Telnet 客户进程也可以使客户直接和客户进程进行交互,而不是发送到服务器进程。通常客户的转义字符是 Ctrl+] ,这使得客户显示它的提示符,通常是 telnet>
示例代码如下:
BYTE byCmd [3];
byCmd [0] = 255;
byCmd [1] = 254;
byCmd [2] = 1;
send ( sConnect , ( char *) byCmd , 3, 0);
      
BYTE byBuf [32];
memset (( char *) byBuf , 0, 32);
recv ( sConnect , ( char *) byBuf , 32, 0); 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值