网络编程之Telnet简单远程登录协议
扫描二维码
随时随地手机看文章
这里不讲解telnet协议的实现原理,主要用于学习telnet实际的编写方式。 使用的网络协议:tcp/ip telnet协议 编程语言:C/C++ 库:socket套接字
了解telnet协议
一个简单的远程登录协议
用于远程连接目标计算机,使用目标计算机的cmd命令行实现远程操作。 登录目标计算机时,必须提供计算机的用户名和密码凭证,才能成功登录。 telnet协议的基础 telnet的默认端口号:23 客户端与服务器通讯步骤: 客户端连接服务器。 客户端等待接收服务器发来的一组telnet命令。 客户端解析命令,以服务器要求特性(其实就是一个命令中的第三个字节),以相同的方式,以接受要求的命令(修改第二个字节),发回给服务器。 服务器接收到以后,发送普通字符串(欢迎和一个login:),表示要你输入计算机的用户名凭证。 客户端发送用户名后,再发送LFCR(rn),表示准备输入密码。 服务器接收到以后,发送普通字符串(password:),表示要你输入计算机的用户密码凭证。
客户端发送密码后,再发送LFCR(rn),表示输入完成。
服务器接收到以后,发送普通字符串:
1) 验证凭证成功:类似cmd命令行一样的字符串,例子:C:UserAaron>
2) 验证凭证失败:句柄无效。Login Failed
3) 连续输入错误,默认情况下只能输错3次,3次以后服务器主动断开与客户端的连接。
验证凭证成功,客户端就像操作自己的cmd命令行一样,可以远程操作目标。
每输入一个字符,发送到服务器,服务器响应一个与发送字符相同的字符,表示你输入了什么。 发送LFCR(rn),表示执行这一段cmd命令,服务器就会响应cmd命令行执行完毕后,信息的反馈。 关闭客户端,结束。 telnet协议的应用层命令
由于不同的系统,底层实现的不同,要做到兼容所有计算机,而使用了NVT命令作为一个公共语言进行交流。
一条telnet命令的格式:IAC 每一条telnet NVT命令的第一个字节叫做IAC,十进制值为255。 一条telnet命令的格式:IAC 命令 选项码 共3个字节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命令的处理,可以下载学习一下:
telnet命令 | 重要的telnet命令 | |
---|---|---|
telnet命令 | 十进制表示 | 作用 |
备注 | ||
协商命令 | 发送方 | 接收方回应 |
十进制 | 作用 |