TELNET协议

article/2025/10/13 22:56:49

参考链接:https://blog.csdn.net/luo104660577/article/details/47001105

1、Telnet协议的目的是提供一个相对通用的,双向的,面向八位字节的通信方法,允许界面终端设备和面向终端的过程能通过一个标准过程进行互相交互。应用Telnet协议能够把本地用户所使用的计算机变成远程主机系统的一个终端。

2、Telnet的特点

适应异构  

      为了使多个操作系统间的Telnet交互操作成为可能,就必须详细了解异构计算机和操作系统。比如,一些操作系统需要每行文本用ASCII回车控制符(CR)结束,另一些系统则需要使用ASCII换行符(LF),还有一些系统需要用两个字符的序列回车-换行(CR-LF);再比如,大多数操作系统为用户提供了一个中断程序运行的快捷键,但这个快捷键在各个系统中有可能不同(一些系统使用CTRL+C,而另一些系统使用ESCAPE)。如果不考虑系统间的异构性,那么在本地发出的字符或命令,传送到远地并被远地系统解释后很可能会不准确或者出现错误。因此,Telnet协议必须解决这个问题。

      为了适应异构环境,Telnet协议定义了数据和命令在Internet上的传输方式,此定义被称作网络虚拟终端NVT(Net Virtual Terminal)。它的应用过程如下:

  •  对于发送的数据:客户机软件把来自用户终端的按键和命令序列转换为NVT格式,并发送到服务器,服务器软件将收到的数据和命令,从NVT格式转换为远地系统需要的格式;
  • 对于返回的数据:远地服务器将数据从远地机器的格式转换为NVT格式,而本地客户机将将接收到的NVT格式数据再转换为本地的格式。

传送远地命令

Telnet同样使用NVT来定义如何从客户机将控制功能传送到服务器。我们知道USASCII字符集包括95个可打印字符和33个控制码。当用户从本地键入普通字符时,NVT将按照其原始含义传送;当用户键入快捷键(组合键)时,NVT将把它转化为特殊的ASCII字符在网络上传送,并在其到达远地机器后转化为相应的控制命令。将正常ASCII字符集与控制命令区分主要有两个原因:

  •  这种区分意味着Telnet具有更大的灵活性:它可在客户机与服务器间传送所有可能的ASCII字符以及所有控制功能;
  •  这种区分使得客户机可以无二义性的指定信令,而不会产生控制功能与普通字符的混乱。  

数据流向

       将Telnet设计为应用级软件有一个缺点,那就是:效率不高。这是为什么呢?

      数据信息被用户从本地键盘键入并通过操作系统传到客户机程序,客户机程序将其处理后返回操作系统,并由操作系统经过网络传送到远地机器,远地操作系统将所接收数据传给服务器程序,并经服务器程序再次处理后返回到操作系统上的伪终端入口点,最后,远地操作系统将数据传送到用户正在运行的应用程序,这便是一次完整的输入过程;输出将按照同一通路从服务器传送到客户机。

因为每一次的输入和输出,计算机将切换进程环境好几次,这个开销是很昂贵的。还好用户的键入速率并不算高,这个缺点我们仍然能够接受。

强制命令

 我们应该考虑到这样一种情况:假设本地用户运行了远地机器的一个无休止循环的错误命令或程序,且此命令或程序已经停止读取输入,那么操作系统的缓冲区可能因此而被占满,如果这样,远地服务器也无法再将数据写入伪终端,并且最终导致停止从TCP连接读取数据,TCP连接的缓冲区最终也会被占满,从而导致阻止数据流流入此连接。如果以上事情真的发生了,那么本地用户将失去对远地机器的控制。

      为了解决此问题,Telnet协议必须使用外带信令以便强制服务器读取一个控制命令。我们知道TCP用紧急数据机制实现外带数据信令,那么Telnet只要再附加一个被称为数据标记(date mark)的保留八位组,并通过让TCP发送已设置紧急数据比特的报文段通知服务器便可以了,携带紧急数据的报文段将绕过流量控制直接到达服务器。作为对紧急信令的相应,服务器将读取并抛弃所有数据,直到找到了一个数据标记。服务器在遇到了数据标记后将返回正常的处理过程。

选项协商

Telnet选项的协商方式也很有意思,它对于每个选项的处理都是对称的,即任何一端都可以发出协商申请;任何一端都可以接受或拒绝这个申请。另外,如果一端试图协商另一端不了解的选项,接受请求的一端可简单的拒绝协商。因此,有可能将更新,更复杂的Telnet客户机服务器版本与较老的,不太复杂的版本进行交互操作。如果客户机和服务器都理解新的选项,可能会对交互有所改善。否则,它们将一起转到效率较低但可工作的方式下运行。所有的这些设计,都是为了增强适应异构性,可见Telnet的适应异构性对其的应用和发展是多么重要。

3、原理

Telnet协议的主体由三个部分组成:

  • 网络虚拟终端(NVT,Network Virtual Terminal)的定义;
  • 操作协商定义;
  • 协商有限自动机;

Telnet主要传输两部分内容:数据和命令。

       数据部分每个字节以0开头的ASCII码。

        命令部分以IAC(编码255 0xff   interpret as command)开始,最高位是1

协商选项举例:

客户端 发送<IAC DO ECHO>

服务端 回应<IAC WILL ECHO>

包括三个部分,第一部分IAC表示命令行,第二部分协商选项DO(WILL WONT DONT),第三部分操作选项。

enum _state
{
  state_data,   //下一个状态为数据
  state_code,   //下一个状态为命令字
  state_option  //下一个状态为协商选项
};

telnet的命令字

#define NUL     0
#define BEL     7
#define BS      8
#define HT      9
#define LF     10
#define VT     11
#define FF     12
#define CR     13
#define SE    240
#define NOP   241
#define DM    242
#define BRK   243
#define IP    244
#define AO    245
#define AYT   246
#define EC    247
#define EL    248
#define GA    249
#define SB    250
#define WILL  251
#define WONT  252
#define DO    253
#define DONT  254
#define IAC   255

操作选项

enum _option
{
 TOPT_BIN = 0,   // Binary Transmission
  TOPT_ECHO = 1,  // Echo
  TOPT_RECN = 2,  // Reconnection
  TOPT_SUPP = 3,  // Suppress Go Ahead
  TOPT_APRX = 4,  // Approx Message Size Negotiation
  TOPT_STAT = 5,  // Status
  TOPT_TIM = 6,   // Timing Mark
  TOPT_REM = 7,   // Remote Controlled Trans and Echo
  TOPT_OLW = 8,   // Output Line Width
  TOPT_OPS = 9,   // Output Page Size
  TOPT_OCRD = 10, // Output Carriage-Return Disposition
  TOPT_OHT = 11,  // Output Horizontal Tabstops
  TOPT_OHTD = 12, // Output Horizontal Tab Disposition
  TOPT_OFD = 13,  // Output Formfeed Disposition
  TOPT_OVT = 14,  // Output Vertical Tabstops
  TOPT_OVTD = 15, // Output Vertical Tab Disposition
  TOPT_OLD = 16,  // Output Linefeed Disposition
  TOPT_EXT = 17,  // Extended ASCII
  TOPT_LOGO = 18, // Logout
  TOPT_BYTE = 19, // Byte Macro
  TOPT_DATA = 20, // Data Entry Terminal
  TOPT_SUP = 21,  // SUPDUP
  TOPT_SUPO = 22, // SUPDUP Output
  TOPT_SNDL = 23, // Send Location
  TOPT_TERM = 24, // Terminal Type
  TOPT_EOR = 25,  // End of Record
  TOPT_TACACS = 26, // TACACS User Identification
  TOPT_OM = 27,   // Output Marking
  TOPT_TLN = 28,  // Terminal Location Number
  TOPT_3270 = 29, // Telnet 3270 Regime
  TOPT_X3 = 30,  // X.3 PAD
  TOPT_NAWS = 31, // Negotiate About Window Size
  TOPT_TS = 32,   // Terminal Speed
  TOPT_RFC = 33,  // Remote Flow Control
  TOPT_LINE = 34, // Linemode
  TOPT_XDL = 35,  // X Display Location
  TOPT_ENVIR = 36,// Telnet Environment Option
  TOPT_AUTH = 37, // Telnet Authentication Option
  TOPT_NENVIR = 39,// Telnet Environment Option
  TOPT_EXTOP = 255, // Extended-Options-List
  TOPT_ERROR = 256  // Magic number
};

传输命令举例:

客户发送字节序列来请求打开选项:

<  IAC,WILL,24>

24是终端类型的选项标识符。如果服务器同意该请求,响应为:

<  IAC,DO,24 >

接着服务器发送

<  IAC,SB,24,1,IAC,SE>请求客户给出其终端类型。

SB是子选项开始命令,下一个字节24表示该子选项为终端类型选项。下一个字节1表示:发送你的终端类型。客户的响应为:

<  IAC,SB,24,0,'I','B','M','P','C', IAC,SE>

第四个字节0的含义是“我的终端类型为”。
 

4、telnet可以模拟http、ftp、pop3等其他协议进行交互

原理分析:

在本机使用telnet命令后(目标端口80),会建立一条本机某一端口到服务器80端口的tcp连接

假设 刚建立好的tcp连接不会被两端的应用层协议发现不对而主动切断

(比如 不会要求必须收到某类报文 或者 会忽略收到的不认识的报文)

那么这条连接就能维持下去

现在在telnet程序界面中手动输入http请求的报文,对面的服务器收到了这个报文

而这个报文的格式是 frame-ip-tcp-telnet

其中telnet部分直接就是你输入的那些http的请求报文文本(已经过实验验证,不会包含其余的特殊格式)

所以这个报文其实和标准的http请求报文从数据链路层报头一直到应用层报头都一毛一样

http当然就按照流程回个包给你,而telnet程序也直接把tcp的负载内容作为文本展示给你

当然这一切有一个假设:刚建立好的tcp连接不会被两端的应用层协议主动切断

 

ftp协议也应当是类似的过程,双方都把对方假设了自己的同类,恰好双方的报文格式都可以被对方识别(对方可识别是因为你用telnet手动伪装,telnet可识别是因为telnet不挑格式,只当做文本)

本质:

telnet 可以模拟 基于 tcp 的 文本 传输。文本也就是 ascii 字符。

因为 telnet http ftp 都是基于 tcp 的 文本 传输。

所以可以手动模拟。


 


http://chatgpt.dhexx.cn/article/dE1sOGVJ.shtml

相关文章

【telnet的用法】

1.首先需要本地pc支持telent.找到程序中心&#xff0c;打开windows功能&#xff0c;勾选telnet客户端。 telnet命令&#xff1a; 3.执行telnt命令&#xff1a; telnet 33.44.55.66 5001即可&#xff0c;注意端口号这里不加 &#xff1a; 如果联网了可以不用telnet&#xff…

Telnet 使用

01简介 telnet是一个实用的远程连接命令&#xff0c;采用的是TCP/IP协议。它为用户提供了在本地计算机上完成远程主机工作的能力&#xff0c;在终端使用者的电脑上使用telnet程序&#xff0c;用它连接到服务器。终端使用者可以在telnet程序中输入命令&#xff0c;这些命令会在服…

Telnet详解

------ Oracle中文开发者社区 ------ 如果你想要学习编程,关注本博客,持续获得技术支持,持续获得技术咨询

计算机开启telnet服务,Telnet服务是什么?如何开启Telnet服务

Telnet服务是什么&#xff1f;Telnet服务器软件是我们最常用的远程登录服务器软件&#xff0c;是一种典型的客户机/服务器模型的服务&#xff0c;它应用Telnet协议来工作。那么&#xff0c;什么是Telnet协议&#xff1f;它都具备哪些特点呢&#xff1f; Telnet是位于OSI模型的第…

telnet介绍

介绍 Telnet 是一个应用程序&#xff0c;用于连接到远程主机的命令行终端界面。网络和系统管理员使用此应用程序来配置和管理服务器、路由器、交换机等网络设备。此应用程序基于面向连接的传输控制协议 (TCP)。默认情况下&#xff0c;telnet 服务器在端口 23 上侦听来自客户端…

telnet-server

telnet-server 安装 安装 yum install telnet telnet-server xinetd -y # 开启服务 systemctl start telnet.socket systemctl start xinetd# 设置开机自启 systemctl enable xinetd.service systemctl enable telnet.socket

Telnet使用

一.简介 Telnet是常用的远程登录手段&#xff0c;有两种操作模式&#xff1a;Telnet命令模式和Telnet会话模式。连接到Telnet服务器后&#xff0c;Telnet客户端会自动进入Telnet会话模式&#xff0c;此模式最常见。在会话模式下&#xff0c;所有击键将通过网络发送到Telnet服务…

telnet的使用

背景&#xff1a;-----如下图 在做telnet 192.168.15.128的时候出现报错&#xff0c;说明连接被拒。 解决过程如下&#xff1a; telnet的使用 &#xff08;1&#xff09;安装telnet 在查看的时候如果没有telnet服务&#xff0c;那么进行安装&#xff1a;yum -y install teln…

Telnet用法

什么是Telnet&#xff1f; 对于Telnet的认识&#xff0c;不同的人持有不同的观点&#xff0c;可以把Telnet当成一种通信协议&#xff0c;但是对于入侵者而言&#xff0c;Telnet只是一种远程登录的工具。一旦入侵者与远程主机建立了Telnet连接&#xff0c;入侵者便可以使用目标主…

7.telnetd服务

(1)网络正常后&#xff0c;运行命令 telnetd& 就可以启动单板telnet服务&#xff0c;然后才能使用telnet登录到单板。 (2)进入 xshell 登陆账号和密码即可. (1)修改root密码 passwd命令修改即可,默认密码为空.

java web聊天室原理_java web利用mvc结构实现简单聊天室功能

简单聊天室采用各种内部对象不适用数据库实现。 一个聊天室要实现的基本功能是&#xff1a; 1.用户登录进入聊天室&#xff0c; 2.用户发言 3.用户可以看见别人发言 刚才算是简单的需求分析了&#xff0c;现在就应该是进行mvc结构的设计&#xff1a; 1.视图&#xff0c;有登陆页…

基于Springboot的聊天室Web系统设计

基于Springboot的聊天室Web系统设计 目录 基于Springboot的聊天室Web系统设计 一、背景二、创建项目三、代码实现四、总结五、参考文献 一、背景 WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单&…

Javaweb 聊天室

Javaweb 聊天室 2020.5.13更新&#xff1a; 最近有很多小伙伴私信我&#xff0c;跑不动这个项目&#xff0c;数据库报错之类的。然后我自己也去clone下来重新更新了一下&#xff0c;因为之前是用 eclipse 做的&#xff0c;我现在已经不用了&#xff0c;所以用 idea 重新跑了一…

WebSocket实现简单的web聊天室

WebSocket实现简单的web聊天室 1.需要Tomcat7.0所以服务器 2.需要JDK7.0 3.手工加入Tomcat7.0中lib目录下的一下三个包catalina.jar、tomcat-coyote.jar、websocket-api.jar 4.项目部署后&#xff0c;请将服务器中当前项目下的catalina.jar、tomcat-coyote.jar、websocket-api.…

web网络聊天室

花了四天时间做了一个简单的web聊天室 前端页面效果大概是下面这个样子 1.登陆界面 2.注册界面 这里首先会检查用户名是否重复&#xff0c; 如果重复&#xff0c;会提示你用户名已存在 反正显示可用 3.聊天室界面 登陆成功会在左边显示登陆人的名称以及当前在线人数。 然后…

web聊天室实现

后端&#xff1a; package com.jsx.chat;import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CopyOnWriteArraySet;import javax.websocket.OnClose; imp…

基于Java语言的Web在线聊天室

在线聊天室 能够实现登录,注册,聊天功能,最终效果如下图所示 注册页面 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"…

Springboot+netty实现Web聊天室

Web聊天室的实现 一、项目的创建二、代码编写参考 一、项目的创建 新建Spring项目&#xff1a; 选择JDK版本&#xff1a; 选择Spring Web&#xff1a; 项目名称和位置的设置&#xff1a; 二、代码编写 导入.jar包&#xff1a; gson: https://search.maven.org/artifact/co…

用springboot+netty搭建在线web聊天室

最近自己搭建了一个在线的聊天室&#xff0c;利用netty技术开发&#xff0c;实现在线聊天以及群聊功能&#xff0c;包括好友添加等相关功能&#xff0c;目前还在更新中。 1.我是通过springbootnetty实现&#xff0c;通过使用netty4实现&#xff0c;运用这种方式就可以帮助我们…

基于SSM的Web网页聊天室系统

目 录 第1章 前 言 1 1.1 论文研究的目的和意义 1 1.2 国内外研究综述 2 1.3 论文研究的内容和取得的成果 2 第2章 即时通讯聊天系统开发涉及技术简介 4 2.1 Spring简介 4 2.2 SpringMVC简介 4 2.3 MyBatis简介 5 2.4 AmazeUI简介 5 2.5 开发工具介绍 5 2.5.1 Eclipse集成开发环…