telnet协议解析中的难点

类似下面的数据:

telnet终端的vi模式下,用户输入了一个echo aa bb cc dd命令,然后回车执行


请求:

0000   0d 00                                            ..

响应:

0000   0d 0a                                            ..

响应:(echo的执行结果和提示符)

0000   61 61 20 62 62 20 63 63 20 64 64 0d 0a 1b 5d 30  aa bb cc dd...]0
0010   3b 70 79 77 40 77 6f 72 6b 2d 35 31 3a 20 7e 07  ;pyw@work-51: ~.
0020   70 79 77 40 77 6f 72 6b 2d 35 31 3a 7e 24 20     pyw@work-51:~$ 

请求:

0000   1b                                               .

请求:(调取上一个命令)

0000   6b                                               k

响应:(得到上一个命令,光标右移的15个字节实际为提示符的长度)

0000   65 63 68 6f 20 61 61 20 62 62 20 63 63 20 64 64  echo aa bb cc dd
0010   20 0d 00 1b 5b 43 1b 5b 43 1b 5b 43 1b 5b 43 1b   ...[C.[C.[C.[C.
0020   5b 43 1b 5b 43 1b 5b 43 1b 5b 43 1b 5b 43 1b 5b  [C.[C.[C.[C.[C.[
0030   43 1b 5b 43 1b 5b 43 1b 5b 43 1b 5b 43 1b 5b 43                                                  C.[C.[C.[C.[C.[C

请求:(光标跳转到下一个单词处)

0000   77                                               w

响应:(右移5个字节为echo命令和后面的空格)

0000   1b 5b 43 1b 5b 43 1b 5b 43 1b 5b 43 1b 5b 43     .[C.[C.[C.[C.[C

请求:(cw命令为剪切(删除)当前光标所在单词)

0000   63                                               c

0000   77                                               w

响应:(删除当前光标处的单词)

0000   1b 5b 32 50                                      .[2P


难点在于,从协议本身,我们是无法得知哪一部分数据是提示符的,这就会造成后续的光标移动和实际情况不符。

而提示符信息又是一个随意配置的,这个信息只有服务器掌握,从客户端和中间人都无法直接得知。

在ubuntu系统上,配置提示符非常的容易:

export PS1=提示符串即可

提示符可以是任意字符串且支持转义,甚至可以内容为空。对于中间人来说,自动处理只能通过一些特征数据(如\r\0)来做一些兼容性处理。目前一直没有找到特别好的解决方法。

阅读更多
个人分类: Linux C/C++
想对作者说点什么? 我来说一句

FTP协议解析与实现

2010年12月22日 69KB 下载

GRBL通信协议解析

2018年01月08日 2KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭