Telnet协议分析

来源:互联网 发布:3dmks是什么软件 编辑:程序博客网 时间:2024/05/16 17:47

最近要写一个专门针对华为交换机的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
#define IAC   255

其中SB表示子选项开始,WILL WONT DO DONT是协商选项

TELNET 选项协商的六种情况

 

发送者

接收者

说明

WILL

DO

发送者想激活某选项,接受者接收该选项请求

WILL

DONT

发送者想激活某选项,接受者拒绝该选项请求

DO

WILL

发送者希望接收者激活某选项,接受者接受该请求

DO

DONT

发送者希望接收6者激活某选项,接受者拒绝该请求

WONT

DONT

发送者希望使某选项无效,接受者必须接受该请求

DONT

WONT 

发送者希望对方使某选项无效,接受者必须接受该请求

3 操作选项

enum _option
{
 TOPT_BIN = 0,   // Binary Transmission
  TOPT_ECHO = 1,  // Echo
  TOPT_RECN = 2,  // Reconnection
  TOPT_SUPP = 3,  // Suppress Go Ahead
  TOPT_APRX = 4,  // Approx Message Size Negotiation
  TOPT_STAT = 5,  // Status
  TOPT_TIM = 6,   // Timing Mark
  TOPT_REM = 7,   // Remote Controlled Trans and Echo
  TOPT_OLW = 8,   // Output Line Width
  TOPT_OPS = 9,   // Output Page Size
  TOPT_OCRD = 10, // Output Carriage-Return Disposition
  TOPT_OHT = 11,  // Output Horizontal Tabstops
  TOPT_OHTD = 12, // Output Horizontal Tab Disposition
  TOPT_OFD = 13,  // Output Formfeed Disposition
  TOPT_OVT = 14,  // Output Vertical Tabstops
  TOPT_OVTD = 15, // Output Vertical Tab Disposition
  TOPT_OLD = 16,  // Output Linefeed Disposition
  TOPT_EXT = 17,  // Extended ASCII
  TOPT_LOGO = 18, // Logout
  TOPT_BYTE = 19, // Byte Macro
  TOPT_DATA = 20, // Data Entry Terminal
  TOPT_SUP = 21,  // SUPDUP
  TOPT_SUPO = 22, // SUPDUP Output
  TOPT_SNDL = 23, // Send Location
  TOPT_TERM = 24, // Terminal Type
  TOPT_EOR = 25,  // End of Record
  TOPT_TACACS = 26, // TACACS User Identification
  TOPT_OM = 27,   // Output Marking
  TOPT_TLN = 28,  // Terminal Location Number
  TOPT_3270 = 29, // Telnet 3270 Regime
  TOPT_X3 = 30,  // X.3 PAD
  TOPT_NAWS = 31, // Negotiate About Window Size
  TOPT_TS = 32,   // Terminal Speed
  TOPT_RFC = 33,  // Remote Flow Control
  TOPT_LINE = 34, // Linemode
  TOPT_XDL = 35,  // X Display Location
  TOPT_ENVIR = 36,// Telnet Environment Option
  TOPT_AUTH = 37, // Telnet Authentication Option
  TOPT_NENVIR = 39,// Telnet Environment Option
  TOPT_EXTOP = 255, // Extended-Options-List
  TOPT_ERROR = 256  // Magic number
};

 

传输命令举例

RFC 1091定义了终端类型的子选项协商。举个例子:

客户发送字节序列来请求打开选项:

<  IACWILL24>

24是终端类型的选项标识符。如果服务器同意该请求,响应为:

<  IACDO24 >

接着服务器发送

<  IACSB241IACSE>请求客户给出其终端类型。

SB是子选项开始命令,下一个字节24表示该子选项为终端类型选项。下一个字节1表示:发送你的终端类型。客户的响应为:

<  IACSB240'I''B''M''P''C', IACSE>

第四个字节0的含义是“我的终端类型为”。

 

 

原创粉丝点击