全站数据
8 4 2 0 5 8 1

telnet深度解析

IT海盗 | 简单学习,快乐成才!         
问题更新日期:2024-10-15 03:41:49

问题描述

telnet深度解析,在线求解答
精选答案
最佳答案

下面的debug信息来自与/tmp/telenet.debug文件的一部分。

是客户端按下字母e后发生的四个阶段。这篇主要分析第一阶段和第二阶段。

也就是telrcv函数的主要的功能。

td: netread 1 chars

nd: 65 e

td: ptyflush 1 chars

pd: 65 e

td: ptyread 2 chars

pd: 0065.e

td: netflush 1 chars

下面的是telnetd.c里面最主要的一个函数,其中里面的for循环也是理解telnetd的工作机制最主要的部分。

int

telnetd_run (void)

{

...

for (;;)

{

fd_set ibits, obits, xbits;

register int c;

if (net_input_level () < 0 && pty_input_level () < 0)

break;

FD_ZERO (&ibits);

FD_ZERO (&obits);

FD_ZERO (&xbits);

if (net_output_level () || pty_input_level () > 0)

FD_SET (net, &obits);

else

FD_SET (pty, &ibits);

if (pty_output_level () || net_input_level () > 0)

FD_SET (pty, &obits);

else

FD_SET (net, &ibits);

if (!SYNCHing)

FD_SET (net, &xbits);

if ((c = select (nfd, &ibits, &obits, &xbits, NULL)) <= 0)

{

if (c == -1 && errno == EINTR)

continue;

sleep (5);

continue;

}

if (FD_ISSET (net, &xbits))

SYNCHing = 1;

if (FD_ISSET (net, &ibits))

{

net_read (); 这里是第一阶段执行的函数

}

if (FD_ISSET (pty, &ibits))

{

if (pty_read () <= 0)

break;

c = pty_get_char (1);

#if defined TIOCPKT_IOCTL

if (c & TIOCPKT_IOCTL)

{

pty_get_char (0);

copy_termbuf ();

localstat ();

}

#endif

if (c & TIOCPKT_FLUSHWRITE)

{

static char flushdata[] = { IAC, DM };

pty_get_char (0);

netclear ();

net_output_datalen (flushdata, sizeof (flushdata));

set_neturg ();

DEBUG (debug_options, 1, printoption (

"td: send IAC

其他回答

Telnet是一种用于远程连接和交互式通信的网络协议,允许用户通过网络远程登录和执行命令。它基于客户端-服务器架构,使用端口23进行通信,通过TCP/IP协议传输数据。在telnet会话中,用户可以在远程主机上执行命令、查看文件、编辑文本等。然而由于安全性方面的弱点,telnet已经逐渐被SSH协议所取代。Telnet协议以明文传输数据,容易受到窃听和数据篡改的风险。