这里不讲解telnet协议的实现原理,主要用于学习telnet实际的编写方式。
使用的网络协议:tcp/ip telnet协议
编程语言:C/C++
库:socket套接字
基于Windows的telnet客户端源码:http://download。csdn。net/download/aaron133/10259942
了解telnet协议
一个简单的远程登录协议
- 用于远程连接目标计算机,使用目标计算机的cmd命令行实现远程操作。
- 登录目标计算机时,必须提供计算机的用户名和密码凭证,才能成功登录。
telnet协议的基础
- telnet的默认端口号:23
客户端与服务器通讯步骤:
-
客户端连接服务器。
-
客户端等待接收服务器发来的一组telnet命令。
-
客户端解析命令,以服务器要求特性(其实就是一个命令中的第三个字节),以相同的方式,以接受要求的命令(修改第二个字节),发回给服务器。
-
服务器接收到以后,发送普通字符串(欢迎和一个login:),表示要你输入计算机的用户名凭证。
-
客户端发送用户名后,再发送LFCR( ),表示准备输入密码。
-
服务器接收到以后,发送普通字符串(password:),表示要你输入计算机的用户密码凭证。
-
客户端发送密码后,再发送LFCR( ),表示输入完成。
-
服务器接收到以后,发送普通字符串:
- 验证凭证成功:类似cmd命令行一样的字符串,例子:C:UserAaron>
- 验证凭证失败:句柄无效。Login Failed
- 连续输入错误,默认情况下只能输错3次,3次以后服务器主动断开与客户端的连接。
-
验证凭证成功,客户端就像操作自己的cmd命令行一样,可以远程操作目标。
-
每输入一个字符,发送到服务器,服务器响应一个与发送字符相同的字符,表示你输入了什么。
-
发送LFCR( ),表示执行这一段cmd命令,服务器就会响应cmd命令行执行完毕后,信息的反馈。
-
关闭客户端,结束。
telnet协议的应用层命令
由于不同的系统,底层实现的不同,要做到兼容所有计算机,而使用了NVT命令作为一个公共语言进行交流。
一条telnet命令的格式:
telnet命令
重要的telnet命令
IAC
每一条telnet NVT命令的第一个字节叫做IAC,十进制值为255。
一条telnet命令的格式:IAC 命令 选项码 共3个字节
telnet命令
十进制表示
作用
EOF
236
文件结束符
SUSP
237
挂起当前进程
ABORT
238
异常中止进程
EOR
239
记录结束符
SE
240
自选项结束
NOP
241
无操作
DM
242
数据标记
BRK
243
中断
IP
244
中断进程
AO
245
异常中止输出
AYT
246
对方是否还在运行?
EC
247
转义字符
EL
248
删除行
GA
249
继续进行
SB
250(0xFA)
子选项开始
WILL
251(0xFB)
同意启动(enable)选项
WONT
252(0xFC)
拒绝启动选项
DO
253(0xFD)
认可选项请求
DONT
254(0xFE)
拒绝选项请求
协议协商:
备注
命令中包含相同的选项值,表示可同意激活或不同意激活的选项,或自身表示愿意激活、不激活
注意:下面的发送方不止代表服务端,也代表客户端。
协商命令
发送方
接收方回应
WILL
发送方本身想要激活此选项
DO:同意你激活、DONT:不同意你激活
DO
发送方想叫接收端激活此选项
WILL:我愿意激活、WONT:我不愿意激活
WONT
发送方本身想禁止此选项
DONT:同意你禁止(必须)
DONT
发送方想让接收端去禁止选项
WONT:愿意禁止(必须)
选项码:
十进制
作用
1
回显
3
抑制继续进行(禁止继续进行)
5
状态
6
定时标记(闹钟标记)
24
终端类型
31
窗口大小
32
终端速度
33
远程流量控制
34
行方式
36
环境变量
编写telnet客户端程序:
由于代码过多,不好在这里直接贴出来,我为使用telnet协议写了一个C++类,可以很简单的使用登录目标计算机,远程操作,想要学习登录过程,解析Telnet命令的处理,可以下载学习一下: