最近要写一个专门针对华为交换机的Telnet客户端,所以得对Telnet协议有所理解和分析。
前言
传输单位:字节(8bit)。
为了解决异构环境,比如不同OS的通信,采用了NVT(Net Virtural Terminal)的机制。客户端把传输的数据转换成NVT格式在网络上传输,服务器接收到NVT格式的数据转换成可以识别的数据。
Telnet主要传输两部分内容:数据和命令。
数据部分每个字节以0开头的ASCII码。
命令部分以IAC(编码255 0xff interpret as command)开始,最高位是1
协商选项举例:
客户端 发送<IAC DO ECHO>
服务端 回应<IAC WILL ECHO>
包括三个部分,第一部分IAC表示命令行,第二部分协商选项DO(WILL WONT DONT),第三部分操作选项。
附录
1 telnet传输数据的状态
enum _state
{
state_data, //下一个状态为数据
state_code, //下一个状态为命令字
state_option //下一个状态为协商选项
};
2 telnet的命令字
#define NUL 0
#define BEL 7
#define BS 8
#define HT 9
#define LF 10
#define VT 11
#define FF 12
#define CR 13
#define SE 240
#define NOP 241
#define DM 242
#define BRK 243
#define IP 244
#define AO 245
#define AYT 246
#define EC 247
#define EL 248
#define GA 249
#define SB 250
#define WILL 251
#define WONT 252
#define DO 253
#define DONT 254