telnet 客户端发送命令过长出现乱码问题

问题描述

当采用网络调试助手telnet登录5000的设备时,输入的命令如下,5000 telnet服务端不回应过来的字符会有乱码:
在这里插入图片描述

而当采用MobaXterm或者secrt telnet登录敲下面的指令是不会有的:
在这里插入图片描述
在这里插入图片描述

首先需要了解一下telnet协议
telnet 协议是 TCP/IP 协议族中应用最广泛的协议。它允许用户(Telnet 客户端)通过一个协商过程来与一个远程设备进行通信。通常情况下,客户机向服务器发送字符而服务器将其回显到用户的终端上。当定义了网络虚拟终端设备后,通信的双方就可以在一个较低的层次上实现数据通信,但基本的 NVT 设备所具有的特性是十分有限的,它只能接收和显示 7 位的 ASCII 码,没有最基本的编辑能力,所以简单的 NVT 设备是没有实际应用意义的;为此 TELNET 协议定义了一族协议用于扩展基本 NVT 的功能,目的是使 NVT 能够最大限度地达到用户终端所具有的功能。为了实现对多种终端特性的支持,TELNET协议规定在扩展NVT功能时采用协商的机制,只有通信双方通过协商后达成一致的特性才能使用,才能赋予NVT该项特性,这样就可以支持具有不同终端特性的终端设备可以互连,保证他们是工作在他们自己的能力以内。
命令码如下:
在这里插入图片描述
在这里插入图片描述

思考过程

每个软件发送的字符是一样的,但是只有网络调试助手有问题,那么就应该是协商的不对。抓几个包看一下,首先抓secrt软件的包:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再抓一个网络调试助手的包:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到telnet服务端发消息给客户端要求协商窗口大小等信息;但是网络调试助手没有回应,于是服务端就都使用默认的窗口大小为80;这样当字符串超过80的时候就会添加一些字符来表示换行或者啥的。secrt有这个协商,且它自己本地的回显串口做了优化,会忽略这些字符,所以我们看到的都是好的,不会出现乱码。

解决方法

①更改服务端程序,不进行窗口大小的协商,默认使用最大的字符长度;这样需要修改telnetd的程序;该程序由busybox编译实现,不是自己写的,暂不考虑。
②改编终端默认的属性,使用stty命令;在网络调试助手输入stty cols 4096;就可以了,这样它会与服务端进行窗口大小的协商,让字符串长度为4096就没有这个问题了。
③修改客户端的程序,交互窗口大小信息时可以固定发送最大的大小。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值