telnet实现过程 https://docs.huihoo.com/rfc/RFC854.txt 更多...
函数 | |
VOID | TelnetLock (VOID) |
VOID | TelnetUnlock (VOID) |
STATIC UINT8 * | ReadFilter (const UINT8 *src, UINT32 srcLen, UINT32 *dstLen) |
STATIC ssize_t | WriteToFd (INT32 fd, const CHAR *src, size_t srcLen) |
STATIC VOID | TelnetClientClose (VOID) |
STATIC VOID | TelnetRelease (VOID) |
STATIC VOID | TelnetdDeinit (VOID) |
STATIC INT32 | TelnetdInit (UINT16 port) |
STATIC INT32 | TelnetClientPrepare (INT32 clientFd) |
远程登录客户端准备阶段 更多... | |
STATIC VOID * | TelnetClientLoop (VOID *arg) |
TelnetClientLoop 处理远程客户端的请求任务的入口函数 更多... | |
STATIC VOID | TelnetClientTaskAttr (pthread_attr_t *threadAttr) |
STATIC INT32 | TelnetdAcceptClient (INT32 clientFd, const struct sockaddr_in *inTelnetAddr) |
STATIC VOID | TelnetdAcceptLoop (INT32 listenFd) |
STATIC INT32 | TelnetdMain (VOID) |
TelnetdMain 更多... | |
STATIC VOID | TelnetdTaskInit (VOID) |
TelnetdTaskInit 创建 telnet 服务端任务 1. telnet启动要确保网络驱动及网络协议栈已经初始化完成,且板子的网卡是link up状态。 2. 暂时无法支持多个客户端(telnet + IP)同时连接开发板。 须知: telnet属于调测功能,默认配置为关闭,正式产品中禁止使用该功能。 更多... | |
STATIC VOID | TelnetdTaskDeinit (VOID) |
STATIC VOID | TelnetUsage (VOID) |
远程登录用法 telnet [on | off] 更多... | |
INT32 | TelnetCmd (UINT32 argc, const CHAR **argv) |
本命令用于启动或关闭telnet server服务 更多... | |
SHELLCMD_ENTRY (telnet_shellcmd, CMD_TYPE_EX, "telnet", 1,(CmdCallBackFunc) TelnetCmd) | |
变量 | |
STATIC volatile INT32 | g_telnetClientFd = -1 |
STATIC volatile INT32 | g_telnetListenFd = -1 |
STATIC volatile UINT32 | g_telnetMask = 0 |
STATIC atomic_t | g_telnetTaskId = 0 |
telnet 服务端任务ID 更多... | |
pthread_mutex_t | g_telnetMutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP |
telnet实现过程 https://docs.huihoo.com/rfc/RFC854.txt
telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员, 是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的 能力。 在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行, 就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个 telnet会话,必须输入用户名和密码来登录服务器。 Telnet是常用的远程控制Web服务器的方法。 但是,telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。 但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。 telnet命令还可做别的用途,比如确定远程服务的状态,比如确定远程服务器的某个端口是否能访问。 下面几个编码对NVT打印机有确定意义: 名称 编码 意义 NULL (NUL) 0 没有操作 BELL (BEL) 7 产生一个可以看到或可以听到的信号(而不移动打印头。) Back Space (BS) 8 向左移动打印头一个字符位置。 Horizontal Tab (HT) 9 把打印头移到下一个水平制表符停止的位置。它仍然没有指定每一方如何检测或者设定如何定位这样的制表符的停止位置。 Line Feed (LF) 10 打印头移到下一个打印行,但不改变打印头的水平位置。 Vertical Tab (VT) 11 把打印头移到下一个垂直制表符停止的位置。它仍然没有指定每一方如何检测或者设定如何定位这样的制表符的停止位置。 Form Feed (FF) 12 把打印头移到下一页的顶部,保持打印头在相同的水平位置上。 Carriage Return (CR) 13 把打印头移到当前行的左边 。 下面是所有已定义的TELNET命令。需要注意的是,这些代码和代码序列只有在前面跟一个IAC时才有意义。 ------------------------------------------------------------------------ 名称 代码 意义 ------------------------------------------------------------------------ SE 240 子谈判参数的结束 NOP 241 空操作 Data Mark 242 一个同步信号的数据流部分。该命令的后面经常跟着一个TCP紧急通知 Break 243 NVT的BRK字符 Interrupt Process 244 IP功能. Abort output 245 AO功能. Are You There 246 AYT功能. Erase character 247 EC功能. Erase Line 248 EL功能. Go ahead 249 GA信号. SB 250 表示后面所跟的是对需要的选项的子谈判 WILL (option code) 251 表示希望开始使用或者确认所使用的是指定的选项。 WON'T (option code) 252 表示拒绝使用或者继续使用指定的选项。 DO (option code) 253 表示一方要求另一方使用,或者确认你希望另一方使用指定的选项。 DON'T (option code) 254 表示一方要求另一方停止使用,或者确认你不再希望另一方使用指定的选项。 IAC 255 Data Byte 255.
在文件 telnet_loop.c 中定义.
SHELLCMD_ENTRY | ( | telnet_shellcmd | , |
CMD_TYPE_EX | , | ||
"telnet" | , | ||
1 | , | ||
(CmdCallBackFunc) | TelnetCmd | ||
) |
STATIC VOID TelnetClientClose | ( | VOID | ) |
STATIC VOID * TelnetClientLoop | ( | VOID * | arg | ) |
TelnetClientLoop 处理远程客户端的请求任务的入口函数
arg |
在文件 telnet_loop.c 第 409 行定义.
远程登录客户端准备阶段
在文件 telnet_loop.c 第 358 行定义.
STATIC VOID TelnetClientTaskAttr | ( | pthread_attr_t * | threadAttr | ) |
在文件 telnet_loop.c 第 502 行定义.
本命令用于启动或关闭telnet server服务
在文件 telnet_loop.c 第 692 行定义.
在文件 telnet_loop.c 第 517 行定义.
STATIC VOID TelnetdAcceptLoop | ( | INT32 | listenFd | ) |
在文件 telnet_loop.c 第 565 行定义.
STATIC VOID TelnetdDeinit | ( | VOID | ) |
ai_family参数指定调用者期待返回的套接口地址结构的类型。它的值包括三种:AF_INET,AF_INET6和AF_UNSPEC AF_INET: 不能返回任何IPV6相关的地址信息 AF_INET6: 不能返回任何IPV4地址信息 AF_UNSPEC: 返回的是适用于指定主机名和服务名且适合任何协议族的地址。如果某个主机既有AAAA记录(IPV6)地址, 同时又有A记录(IPV4)地址,那么AAAA记录将作为sockaddr_in6结构返回,而A记录则作为sockaddr_in结构返回
在文件 telnet_loop.c 第 310 行定义.
STATIC INT32 TelnetdMain | ( | VOID | ) |
TelnetdMain
telnet启动要确保网络驱动及网络协议栈已经初始化完成,且板子的网卡是link up状态。 暂时无法支持多个客户端(telnet + IP)同时连接开发板。 输入 telnet on OHOS # telnet on OHOS # start telnet server successfully, waiting for connection.
在文件 telnet_loop.c 第 608 行定义.
STATIC VOID TelnetdTaskDeinit | ( | VOID | ) |
STATIC VOID TelnetdTaskInit | ( | VOID | ) |
TelnetdTaskInit 创建 telnet 服务端任务
1. telnet启动要确保网络驱动及网络协议栈已经初始化完成,且板子的网卡是link up状态。
2. 暂时无法支持多个客户端(telnet + IP)同时连接开发板。
须知: telnet属于调测功能,默认配置为关闭,正式产品中禁止使用该功能。
在文件 telnet_loop.c 第 646 行定义.
VOID TelnetLock | ( | VOID | ) |
在文件 telnet_loop.c 第 157 行定义.
STATIC VOID TelnetRelease | ( | VOID | ) |
VOID TelnetUnlock | ( | VOID | ) |
在文件 telnet_loop.c 第 162 行定义.
STATIC VOID TelnetUsage | ( | VOID | ) |
STATIC volatile INT32 g_telnetClientFd = -1 |
在文件 telnet_loop.c 第 145 行定义.
STATIC volatile INT32 g_telnetListenFd = -1 |
在文件 telnet_loop.c 第 148 行定义.
STATIC volatile UINT32 g_telnetMask = 0 |
在文件 telnet_loop.c 第 151 行定义.
pthread_mutex_t g_telnetMutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP |
在文件 telnet_loop.c 第 155 行定义.
STATIC atomic_t g_telnetTaskId = 0 |
telnet 服务端任务ID
在文件 telnet_loop.c 第 153 行定义.