透明模式下的Telnet协议包
在使用 Telnet 服务时,Telnet 提供了选项的交互和协商功能。由于交互方式不同,Telnet 有两种工作模式,分别为透明模式和行模式。
下面首先讲解透明模式下的协议包。
透明模式是采用一次一个字符的模式,把用户输入的命令发送给服务器。当得到服务器的回显,再对回显进行确认,表示客户端收到信息。
【实例】以 Telnet 服务(192.168.59.135),用户名为 sm,密码为 123 为例,本节分析透明模式下的 Telnet 协议包。
这 3 个数据包是 Telnet 客户端(192.168.59.133)连接 Telnet 服务(192.168.59.135)发送的 3 次握手包。
1) 客户端向服务器发送的选项协商数据包,如图所示。
其中,第 8 个数据包为客户端向服务器发送的选项协商数据包。在 Telnet 部分,其中,Do 为命令,Echo 为子命令,表示客户端要求服务器端将发送过去的字回显给自己(客户端)。第 9 个数据包为服务段的确认数据包,表示已经收到发来的选项协商数据包。
2) 客户端再次发送的选项协商数据包,如图所示。
其中,在数据包的 Telnet 部分中,Do 为命令,Suppress Go Ahead 为子命令,表示要抑制 Go Ahead 选项。激活 Suppress Go Ahead 选项是为了使 Echo 选项回显功能有效。
3) 服务器向客户端发送的选项协商数据包,如图所示。
其中,第 11 个数据包为服务器向客户端发送的选项协商数据包。在 Telnet 部分中,Will 为命令,Echo 为子命令,表示服务器希望客户端将发送过去的字回显给自己(服务器端)。第 12 个数据包为客户端的确认数据包。
4) 服务器再次发送选项协商数据包,并发送数据信息,如图所示。
其中,第 13 个数据包 Telnet 部分中,Will 为命令,Suppress Go Ahead 为子命令,激活Suppress Go Ahead选项,表示服务器要抑制 Go Ahead 选项。同时,服务器发送了两个数据。
Welcome 192.168.59.133\r\n 数据表示服务器欢迎客户端(192.168.59.133)进行登录;Login 数据表示需要客户端输入登录 Telnet 服务器端的用户名。
第 14 个数据包为客户端的确认包,表示收到数据包。
1) 客户端输入登录的用户名,对应的数据包如图所示。
该数据包的 Telnet 部分中,数据信息只有 s(一个字符),表示客户端输入用户名的第 1 个字符。这是因为这里使用的是透明模式,所以客户端每输入一个字符,都会马上被发送给服务器。发送时采用明文形式。
2) 服务器进行回显,对应的数据包如图所示。
在第 18 个数据包的 Telnet 部分中,数据信息也只有一个字符 s,这是服务器端输入的字符返回给了客户端。这是因为在协商阶段中,客户端要求服务器进行回显。第 19 个数据包为客户端对服务器回显数据包的确认。
3) 客户端继续输入登录用户名的第 2 个字符,如图所示。
第 20 个数据包传输的数据为客户端输入用户名的第 2 个字符 m,仍然是单字节发送给服务器。第 21 个数据包为服务器的回显数据包,第 22 个数据包为客户端对服务器回显数据包的确认。
以此类推,用户名字节的剩余字节也将按照单个字节的方式发送给服务器,然后服务器进行回显,最后客户端进行确认。
4) 当客户端输入完所有的用户名字符以后,按回车键换行,表示用户名输入完毕。这将产生行结束数据包,如图所示。
在第 24 个数据包的 Telnet 部分中,数据信息为 \r\n,表示行结束符,即 CR(回车)和 LF(换行)。第 25 个数据包为服务器的回显数据包,第 26 个数据包为客户端对服务器回显数据包的确认。
5) 用户名输入完成后,服务器向客户端发送要求输入密码的数据包,如图所示。
在第 27 个数据包的 Telnet 部分中,数据信息为 Password:,表示服务器要求客户端输入密码。第 28 个数据包为客户端的确认包。
6) 与输入用户名一样,客户端输入密码时,每输入的一个字符都被马上发送给服务器,并得到服务器的确认,但服务器不会回显密码,如图所示。
在第 30 个数据包的 Telnet 部分中,数据信息为 1,表示密码的第一位是 1。第 31 个数据包为服务器收到输入密码的确认包。以此类推,直到客户端输入所有的密码,并按回车键。
7) 客户端完成密码的输入,并按回车键后,将向服务器发送行结束数据包,如图所示。
在第 36 个数据包的 Telnet 部分中,数据信息为 \r\n,表示此时客户端已经完成密码的输入。第 37 个数据包为服务器的确认包。
8) 服务器对完成密码输入的数据包将进行回显,如图所示。
在第 38 个数据包的 Telnet 部分中,数据信息为 \r\n,是回显数据包。第 39 个数据包为客户端的确认包。
9) 密码成功输入以后,客户端将成功登录服务器。服务器将为客户端提供输入执行命令的会话模式,如图所示。
在第 40 个数据包的 Telnet 部分中给出了多个数据信息,最后一个数据信息为$,表示服务器为客户端提供了会话模式。在该模式下,客户端可以输入要执行的命令。第41个数据包为客户端的确认包。
1) 例如,客户端要查询服务器的网络配置信息,需要输入命令 /sbin/ifconfig。和前面一样,每输入一个字符,都会得到服务器的回显和客户端的确认,如图所示。
在第 43 个数据包的 Telnet 部分中,数据信息为
2) 完成命令的输入以后,服务器将把命令的执行结果返回给客户端,如图所示。
第 99 个数据包的 Telnet 部分显示了命令的执行结果。第 100 个数据包为客户端的确认。
3) 服务器成功将命令的执行结果返回给客户端以后,再次返回会话模式,等待客户端下一个命令,如图所示。
在第 101 个数据包的 Telnet 部分中,数据信息为 $,表示服务器再次回到会话模式。第 102 个数据包为客户端的确认。
其中,第 105 个数据包是客户端向服务器发送的请求断开连接的 TCP[FIN,ACK] 数据包;第 106 个数据包为服务器进行断开连接的 TCP[FIN,ACK] 数据包;第 107 个数据包为客户端的确认。
下面首先讲解透明模式下的协议包。
透明模式是采用一次一个字符的模式,把用户输入的命令发送给服务器。当得到服务器的回显,再对回显进行确认,表示客户端收到信息。
【实例】以 Telnet 服务(192.168.59.135),用户名为 sm,密码为 123 为例,本节分析透明模式下的 Telnet 协议包。
TCP 连接
客户端连接服务器的 Telnet 协议包,如图所示。Telnet 协商
协商阶段是客户端和服务器之间相互请求对方,对通信过程的消息选项进行确认,明确后续消息的传送方式。协商期间,通信的过程如下:1) 客户端向服务器发送的选项协商数据包,如图所示。
2) 客户端再次发送的选项协商数据包,如图所示。
3) 服务器向客户端发送的选项协商数据包,如图所示。
4) 服务器再次发送选项协商数据包,并发送数据信息,如图所示。
Welcome 192.168.59.133\r\n 数据表示服务器欢迎客户端(192.168.59.133)进行登录;Login 数据表示需要客户端输入登录 Telnet 服务器端的用户名。
第 14 个数据包为客户端的确认包,表示收到数据包。
Telnet 认证
Telnet 认证阶段主要是服务器端对客户端的身份进行确认。通信过程如下所述。1) 客户端输入登录的用户名,对应的数据包如图所示。
2) 服务器进行回显,对应的数据包如图所示。
3) 客户端继续输入登录用户名的第 2 个字符,如图所示。
以此类推,用户名字节的剩余字节也将按照单个字节的方式发送给服务器,然后服务器进行回显,最后客户端进行确认。
4) 当客户端输入完所有的用户名字符以后,按回车键换行,表示用户名输入完毕。这将产生行结束数据包,如图所示。
5) 用户名输入完成后,服务器向客户端发送要求输入密码的数据包,如图所示。
6) 与输入用户名一样,客户端输入密码时,每输入的一个字符都被马上发送给服务器,并得到服务器的确认,但服务器不会回显密码,如图所示。
7) 客户端完成密码的输入,并按回车键后,将向服务器发送行结束数据包,如图所示。
8) 服务器对完成密码输入的数据包将进行回显,如图所示。
9) 密码成功输入以后,客户端将成功登录服务器。服务器将为客户端提供输入执行命令的会话模式,如图所示。
命令交互
命令交互阶段主要完成客户端的命令输入和服务器端的执行和回显。通信过程如下:1) 例如,客户端要查询服务器的网络配置信息,需要输入命令 /sbin/ifconfig。和前面一样,每输入一个字符,都会得到服务器的回显和客户端的确认,如图所示。
/
,表示客户端输入命令的第 1 个字符。第 44 个数据包为服务器的回显数据包,第 45 个数据包为客户端对回显数据包的确认。2) 完成命令的输入以后,服务器将把命令的执行结果返回给客户端,如图所示。
3) 服务器成功将命令的执行结果返回给客户端以后,再次返回会话模式,等待客户端下一个命令,如图所示。
断开连接
如果客户端将不再执行命令,就可以断开连接了。这时,客户端将向服务器发送断开连接的 TCP 数据包,如图所示。所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算