网络编程之Telnet简单远程登录协议

这里不讲解telnet协议的实现原理,主要用于学习telnet实际的编写方式。
使用的网络协议:tcp/ip telnet协议
编程语言:C/C++
库:socket套接字
基于Windows的telnet客户端源码:http://download。csdn。net/download/aaron133/10259942

了解telnet协议

一个简单的远程登录协议

  • 用于远程连接目标计算机,使用目标计算机的cmd命令行实现远程操作。
  • 登录目标计算机时,必须提供计算机的用户名和密码凭证,才能成功登录。

telnet协议的基础

  • telnet的默认端口号:23

客户端与服务器通讯步骤:

  1. 客户端连接服务器。
  2. 客户端等待接收服务器发来的一组telnet命令。
  3. 客户端解析命令,以服务器要求特性(其实就是一个命令中的第三个字节),以相同的方式,以接受要求的命令(修改第二个字节),发回给服务器。
  4. 服务器接收到以后,发送普通字符串(欢迎和一个login:),表示要你输入计算机的用户名凭证。
  5. 客户端发送用户名后,再发送LFCR(\r\n),表示准备输入密码。
  6. 服务器接收到以后,发送普通字符串(password:),表示要你输入计算机的用户密码凭证。
  7. 客户端发送密码后,再发送LFCR(\r\n),表示输入完成。

  8. 服务器接收到以后,发送普通字符串
    1) 验证凭证成功:类似cmd命令行一样的字符串,例子:C:\User\Aaron>
    2) 验证凭证失败:句柄无效。Login Failed
    3) 连续输入错误,默认情况下只能输错3次,3次以后服务器主动断开与客户端的连接。

  9. 验证凭证成功,客户端就像操作自己的cmd命令行一样,可以远程操作目标。

  10. 每输入一个字符,发送到服务器,服务器响应一个与发送字符相同的字符,表示你输入了什么。
  11. 发送LFCR(\r\n),表示执行这一段cmd命令,服务器就会响应cmd命令行执行完毕后,信息的反馈。
  12. 关闭客户端,结束。

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命令的处理,可以下载学习一下:

网络编程之Telnet简单远程登录协议_第1张图片

你可能感兴趣的:(Windows网络编程)