问问题描述
答精选答案

下面的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
答其他回答(1条)
-
Telnet是一种用于远程连接和交互式通信的网络协议,允许用户通过网络远程登录和执行命令。它基于客户端-服务器架构,使用端口23进行通信,通过TCP/IP协议传输数据。在telnet会话中,用户可以在远程主机上执行命令、查看文件、编辑文本等。然而由于安全性方面的弱点,telnet已经逐渐被SSH协议所取代。Telnet协议以明文传输数据,容易受到窃听和数据篡改的风险。
本文来自作者[offer帝]投稿,不代表公众科技网立场,如若转载,请注明出处:https://www.cpst.net.cn/changshijingxuan/202609/1140472.html

评论列表(4条)
我是公众科技网的签约作者“offer帝”!
希望本篇文章《telnet深度解析》能对你有所帮助!
本站[公众科技网]内容主要涵盖:教育咨询,知识百科
本文概览:下面的debug信息来自与/tmp/telenet.debug文件的一部分。是客户端按下字母e后发生的四个阶段。这篇主要分析第一阶段和第二阶段。也就是telrcv函数的主要的功能。td: netread 1 charsnd: 65 etd: ptyflush 1 charspd: 65 etd: ptyread 2 charspd: 0065.etd: netflush 1 chars下面的是telnetd.c里面最主要的一个函数,其中里面的for循环也是理解telnetd的工作机制最主要的部分。intt