选项协商是Telnet协议最复杂的部分,总共有39个选项用于配置本地和远程主机间的工作模式。当一方要执行某个选项时需向另一端发出请求,若对方接受该选项,则选项在两端同时起作用,否则两端保持原来的模式。Telnet的命令格式如表2.1、表2.2所示。IAC是Telnet协议中的保留码,双方用IAC确定收到的字节是数据还是命令,Telnet协议的命令是至少包含两个字符(IAC和命令码)的字节序列,选项协商则有3个字节,第三个字节为协商的选项。当协商的选项存在子选项时,要进行子选项协商,命令格式如表2.2所示。
表2.1 Telnet选项协商命令格式
IAC | 命令码 | 选项码 |
表2.2 Telnet子选项协商命令格式
IAC | SB | 选项码 | 参数 | IAC | SE |
算法思想是将子选项协商和选项协商的内容剔除掉,剩下的内容便是传输的内容。具体的实现算法为取存储数组text的第i个字符,i的初始值为0,先判断text【i】是否为‘\0’,如果为‘\0’则将提取的内容拿去检测,如果不是则判断是否为IAC,如果不是IAC则将此字符存储起来,如果是则判断下一个字符是否为SB,如果为SB即开始子选项协商,需要不断的循环查找IAC和SE字符串,直到找到退出查找,如果不是SB则判断是否为WILL、WONT、DO或DONT,如果不是则存储此字符,如果是则丢弃下一个字符,因为下一个字符将是协商内容的字符,这样便可以完成telnet协议分析和内容的提取。
Telnet连接之间的选项协商
Telnet基于TCP传输协议,运行在应用层.提供了客户至服务器的终端交互功能.
Telnet使用一条TCP连接,不像FTP,使用TCP两个连接. TELNET服务器端使用的PORT号为23.
双方在进行Telnet连接时,要进行选项协商.
比如:使用字符方式 窗口的大小,终端的类型都要进行协商.
而协商是通过TELNET所支持的命令来实现的.
TELNET的常用命令(具体的见TCP/IP详解P303):
SE
SB
IAC
WILL
DO
WONT
DONT
TELNET的常用选项代码(具体的见TCP/IP详解P304):
1(0x01)
3(0x03)
24(0x18)
31(0x1F)
32(0x20)
33(0x21)
34(0x22)
36(0x24)
比如,建立一条TELNET连接.实际过程是这样的:(192.168.1.11为客户端.192.168.1.1为服务器端)
1)
2)
3)
4)
5)
6)
7)
8)
9)
10)
11)
12)
13)
14)
15)
16)
17)
18)
....这里一些子选项协议就略过了.一般的,一般登录到主机,还要双方对某些选项进行协商.并且接收方表示同意或不同意(DO,DONT或者WILL WONT)
原文地址:http://blog.chinaunix.net/uid-488742-id-2113878.html