这里不讲解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(\r\n),表示准备输入密码。
- 服务器接收到以后,发送普通字符串(password:),表示要你输入计算机的用户密码凭证。
客户端发送密码后,再发送LFCR(\r\n),表示输入完成。
服务器接收到以后,发送普通字符串:
1) 验证凭证成功:类似cmd命令行一样的字符串,例子:C:\User\Aaron>
2) 验证凭证失败:句柄无效。Login Failed
3) 连续输入错误,默认情况下只能输错3次,3次以后服务器主动断开与客户端的连接。验证凭证成功,客户端就像操作自己的cmd命令行一样,可以远程操作目标。
- 每输入一个字符,发送到服务器,服务器响应一个与发送字符相同的字符,表示你输入了什么。
- 发送LFCR(\r\n),表示执行这一段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命令的处理,可以下载学习一下: