您现在的位置是:首页 > 正文

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

2024-02-01 02:42:33阅读 1
这里不讲解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( ),表示准备输入密码。

  6. 服务器接收到以后,发送普通字符串(password:),表示要你输入计算机的用户密码凭证。

  7. 客户端发送密码后,再发送LFCR( ),表示输入完成。

  8. 服务器接收到以后,发送普通字符串

    1. 验证凭证成功:类似cmd命令行一样的字符串,例子:C:UserAaron>
    2. 验证凭证失败:句柄无效。Login Failed
    3. 连续输入错误,默认情况下只能输错3次,3次以后服务器主动断开与客户端的连接。
  9. 验证凭证成功,客户端就像操作自己的cmd命令行一样,可以远程操作目标。

  10. 每输入一个字符,发送到服务器,服务器响应一个与发送字符相同的字符,表示你输入了什么。

  11. 发送LFCR( ),表示执行这一段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命令的处理,可以下载学习一下:

这里写图片描述

网站文章

  • 创建单链表中出现的一些经典错误(typedef关键字与指针)

    创建单链表中出现的一些经典错误(typedef关键字与指针)

    本文记录的是本人在单链表学习及实现过程中的个人理解和遇到的一些错误,不严谨之处欢迎批评指正。

    2024-02-01 02:42:26
  • Linux Shell 进阶 - Linux Shell进阶学习教程 - Linux Shell练习 - HPC基础 - 源码设计师

    Linux Shell 进阶 - Linux Shell进阶学习教程 - Linux Shell练习 - HPC基础 - 源码设计师

    Linux Shell 进阶 - Linux Shell进阶学习教程 - Linux Shell练习 - HPC基础 - 源码设计师 Linux Shell进阶学习教程 - Linux Shell练习...

    2024-02-01 02:41:57
  • mac OS锁定 解锁文件

    mac OS锁定 解锁文件

    mac OS锁定 解锁文件

    2024-02-01 02:41:54
  • java基础——方法

    方法 /** * 1.什么是方法? * 方法就是把一堆需要反复执行的代码封装起来,如果程序需要执行这段代码,直接调用方法名即可。 * 就是类似于一个榨汁机, * 材料:水果 * 产出物:果汁 * * ...

    2024-02-01 02:41:51
  • 获取浏览器语言

    获取浏览器语言(navigator.language || navigator.browserLanguage).toLowerCase()根据浏览器语言切换语言//根据浏览器语言切换语言functi...

    2024-02-01 02:41:23
  • Tensorflow深度学习之-激活函数选择与使用介绍

    Tensorflow深度学习之-激活函数选择与使用介绍

    激活函数都有一定的使用场景,ReLU的流行只是在大部分的场景下都适用,具体要选择哪种激活函数,要根据你自己的实际应用来作决策。如果你不确定你要用什么,ReLU不会让你失望。在使用ReLU时,ReLU和leaky ReLU任取一个即可,也可以都尝试一下,哪一个能取得最佳结果。

    2024-02-01 02:41:16
  • ActiveMQ初步安装

    ActiveMQ初步安装

    一、官网下载 ActiveMQ官网:http://activemq.apache.org/ 安装ActiveMQ的前提是已经安装好了JAVA JDK环境。 PS:我这里下载的是经典版 下载完之后将它放...

    2024-02-01 02:41:09
  • spring boot 、mybatis-plus、shiro整合入门教程(二)——mybatis-plus常用操作

    spring boot 、mybatis-plus、shiro整合入门教程(二)——mybatis-plus常用操作

    接续上一篇,spring boot 、mybatis-plus、shiro整合入门教程(一)——mybatis-plus代码生成器项目中的数据库表设计如下:菜单管理页面功能:新增、修改、删除、查询新增代码如下:SysMenuController类的代码如下:@Resource private SysMenuServiceImpl sysMenuService; /*...

    2024-02-01 02:41:00
  • .md文档是什么? 如何打开?

    .md文档是什么? 首先来普及一下什么是md文件, md全称markdown,markdown也是一种标记语言。 .md即markdown文件的基本常用编写语法,是一种快速标记、快速排版语言,现在很多前段项目中的说明文件readme等都是用.md文件编写的,而且很多企业也在在鼓励使用这种编辑方式,特别作为一个前端从业者更要学会使用这种语言。下面就简单和大家分享一些...

    2024-02-01 02:40:31
  • 分布式集群框架——zookeeper必考面试题①

    分布式集群框架——zookeeper必考面试题①

    接收到客户端请求,处理请求判断是否需要注册 Watcher,需要的话将数据节点的节点路径和 ServerCnxn(ServerCnxn 代表一个客户端和服务端的连接,实现了 Watcher 的 pro...

    2024-02-01 02:40:26