[转]telnet协议内容提取

来源:互联网 发布:java asset的用法 编辑:程序博客网 时间:2024/06/06 02:35
telnet协议内容提取

选项协商是Telnet协议最复杂的部分,总共有39个选项用于配置本地和远程主机间的工作模式。当一方要执行某个选项时需向另一端发出请求,若对方接受该选项,则选项在两端同时起作用,否则两端保持原来的模式。Telnet的命令格式如表2.1、表2.2所示。IACTelnet协议中的保留码,双方用IAC确定收到的字节是数据还是命令,Telnet协议的命令是至少包含两个字符(IAC和命令码)的字节序列,选项协商则有3个字节,第三个字节为协商的选项。当协商的选项存在子选项时,要进行子选项协商,命令格式如表2.2所示。

 

2.1 Telnet选项协商命令格式

IAC

命令码

选项码

2.2 Telnet子选项协商命令格式

IAC

SB

选项码

参数

IAC

SE

 

 

 

算法思想是将子选项协商和选项协商的内容剔除掉,剩下的内容便是传输的内容。具体的实现算法为取存储数组text的第i个字符,i的初始值为0,先判断texti】是否为‘/0’,如果为‘/0’则将提取的内容拿去检测,如果不是则判断是否为IAC,如果不是IAC则将此字符存储起来,如果是则判断下一个字符是否为SB,如果为SB即开始子选项协商,需要不断的循环查找IACSE字符串,直到找到退出查找,如果不是SB则判断是否为WILLWONTDODONT,如果不是则存储此字符,如果是则丢弃下一个字符,因为下一个字符将是协商内容的字符,这样便可以完成telnet协议分析和内容的提取。



Telnet连接之间的选项协商

Telnet基于TCP传输协议,运行在应用层.提供了客户至服务器的终端交互功能.

Telnet使用一条TCP连接,不像FTP,使用TCP两个连接. TELNET服务器端使用的PORT号为23.

双方在进行Telnet连接时,要进行选项协商.
比如:使用字符方式 窗口的大小,终端的类型都要进行协商.
而协商是通过TELNET所支持的命令来实现的.

TELNET的常用命令(具体的见TCP/IP详解P303):
SE    240(F0)     子选项结束
SB    250(FA)     子选项开始
IAC   255(FF)     选项协商的第一个字节
WILL  251(FB)     发送方激活选项(接收方同意激活选项)
DO    253(FD)     接收方同意(发送方想让接收方激活选项)
WONT  252(FC)     接收方不同意
DONT  254(FE)     接受方回应WONT

TELNET的常用选项代码(具体的见TCP/IP详解P304):
1(0x01)    回显(echo)
3(0x03)    抑制继续进行(传送一次一个字符方式可以选择这个选项)
24(0x18)   终端类型
31(0x1F)   窗口大小
32(0x20)   终端速率
33(0x21)   远程流量控制
34(0x22)   行方式
36(0x24)   环境变量

比如,建立一条TELNET连接.实际过程是这样的:(192.168.1.11为客户端.192.168.1.1为服务器端)
1)   TCP:     192.168.1.11:49200 > 192.168.1.1:23        [SYN]
2)   TCP:     192.168.1.1:23     > 192.168.1.11:49200    [SYN,ACK]
3)   TCP:     192.168.1.11:49200 > 192.168.1.1:23        [ACK]
4)   TELNET:  23 > 49200  IAC DO 24     ( 表示让接收方激活终端类型动 Command: Do Terminal Type)
5)   TELNET:  49200 > 23   IAC WILL 24 / IAC WILL 31 (两条命令IAC WILL 24 IAC WILL 31 分别表示Command:Will Terminal Type / Command Will Negotiate About Window Size)告诉服务器同意终端类型,并且激活窗口大小.
6)   TELNET:  23 > 49200  IAC DO 31 / IAC SB 18 24 01 / IAC SE  (回应客户端允许协商窗口大小 / 子选项 Send your Terminal Type / 子选项结束) 
7)   TELNET:  49200 >23  IAC SB 31 80 26 /  IAC SE ( 回应服务器,子选项 窗口大小为80/26  / 子选项结束) 
8)   TELNET:  49200 >23  IAC SB 18 "ANSI" /  IAC SE (回应服务器,子选项 窗口类型为ANSI字符型  / 子选项结束)
9)   TELNET:  23 > 49200  IAC WILL 03 / IAC WILL 01  (告知客户端 允许抑制继续进行 / 允许回显)
10)  TELNET:  49200 >23  IAC DO 03 (回应服务器,接受方同意允许抑制继续进行)
11)  TELNET:  49200 >23  IAC DO 01 (回应服务器,接受方同意允许回显)
12)  TELNET: Data: ... (此时就开始正式传送数据,这些数据会回显到终端屏幕上)
13)  TELNET: Data: ... (此时就开始正式传送数据,这些数据会回显到终端屏幕上)
14)  TELNET: Data: ... (此时就开始正式传送数据,这些数据会回显到终端屏幕上)
15)  TCP:     192.168.1.11:49200 > 192.168.1.1:23        [FIN ACK]       (请求断开连接)
16)  TCP:     192.168.1.1:23     > 192.168.1.11:49200    [ACK]
17)  TCP:     192.168.1.1:23 > 192.168.1.11:49200        [FIN ACK]       (请求断开连接)
18)  TCP:     192.168.1.11:49200     > 192.168.1.1:23    [ACK]
....这里一些子选项协议就略过了.一般的,一般登录到主机,还要双方对某些选项进行协商.并且接收方表示同意或不同意(DO,DONT或者WILL WONT)

 

http://blogold.chinaunix.net/u1/39518/showart_2466512.html

原创粉丝点击