telnet协议解析中的难点

13 篇文章 0 订阅

类似下面的数据:

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)来做一些兼容性处理。目前一直没有找到特别好的解决方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值