您现在的位置是:首页 > 科技资讯科技资讯
telnet不是内部或外部命令(mesq函数)
编辑 2024-06-04 12:34:50 科技资讯
1. telnet不是内部或外部命令,mesq函数?
1, 在一个Tab窗口运行LTE_fdd_eNodeB进程(启动eNodeB工作进程)
2, 在另一个Tab窗口运行控制进程,可使用连接工具(Telent,nc等)连接LTE_fdd_eNodeB进程(端口固定为30000,以Telnet连接本机示例,使用命令为Telnet 127.0.0.1 30000)来完成配置操作,包括启动,终止LTE_fdd_eNodeB进程中的基站操作,读取,设置基站操作中需要的参数;
2. telnet怎么用?
Telnet是一种远程登录协议,可以通过Telnet客户端连接到远程服务器进行操作。使用Telnet需要知道目标服务器的IP地址和端口号,然后在命令行中输入telnet IP地址 端口号即可连接到目标服务器。
连接成功后,可以输入用户名和密码进行登录,然后就可以在远程服务器上执行命令和操作了。需要注意的是,Telnet协议不够安全,因为所有的数据都是明文传输的,容易被窃听和篡改。因此,现在更常用的远程登录协议是SSH。
3. 光猫的telnet用来干什么?
Telnet是一种应用层协议,使用于互联网及局域网中,使用虚拟终端机的形式,提供双向、以文字字符串为主的命令行接口交互功能。属于TCP/IP协议族的其中之一,是Internet远程登录服务的标准协议和主要方式,常用于服务器的远程控制,可供用户在本地主机运行远程主机上的工作。
4. 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);
/* Never look for input if there's still stuff in the corresponding
output buffer */
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))
{
/* Something to read from the network... */
/*FIXME: handle !defined(SO_OOBINLINE) */
net_read (); 这里是第一阶段执行的函数
}
if (FD_ISSET (pty, &ibits))
{
/* Something to read from the pty... */
if (pty_read () <= 0)
break;
/* The first byte is now TIOCPKT data. Peek at it. */
c = pty_get_char (1);
#if defined TIOCPKT_IOCTL
if (c & TIOCPKT_IOCTL)
{
pty_get_char (0);
copy_termbuf (); /* Pty buffer is now emptied. */
localstat ();
}
#endif
if (c & TIOCPKT_FLUSHWRITE)
{
static char flushdata[] = { IAC, DM };
pty_get_char (0);
netclear (); /* clear buffer back */
net_output_datalen (flushdata, sizeof (flushdata));
set_neturg ();
DEBUG (debug_options, 1, printoption ("td: send IAC", DM));
}
if (his_state_is_will (TELOPT_LFLOW)
&& (c & (TIOCPKT_NOSTOP | TIOCPKT_DOSTOP)))
{
int newflow = (c & TIOCPKT_DOSTOP) ? 1 : 0;
if (newflow != flowmode)
{
net_output_data ("%c%c%c%c%c%c",
IAC, SB, TELOPT_LFLOW,
flowmode ? LFLOW_ON : LFLOW_OFF, IAC, SE);
}
}
pty_get_char (0); /* Discard the TIOCPKT preamble. */
}
while (pty_input_level () > 0)
{
if (net_buffer_is_full ())
break;
c = pty_get_char (0);
if (c == IAC)
net_output_byte (c);
net_output_byte (c);
if (c == '/r' && my_state_is_wont (TELOPT_BINARY))
{
if (pty_input_level () > 0 && pty_get_char (1) == '/n')
net_output_byte (pty_get_char (0));
else
net_output_byte (0);
}
}
if (FD_ISSET (net, &obits) && net_output_level () > 0)
netflush ();
if (net_input_level () > 0)
telrcv ();
if (FD_ISSET (pty, &obits) && pty_output_level () > 0)
ptyflush (); 这里是第二阶段执行的函数。
/* Attending to the child must come last in the loop,
* so as to let pending data be flushed, mainly to the
* benefit of the remote and expecting client.
*/
if (pending_sigchld) {
/* Check for pending output, independently of OBITS. */
if (net_output_level () > 0)
netflush ();
cleanup (SIGCHLD); /* Not returning from this. */
}
}
net_read函数分析。这个函数是接收来自net的一个字符。
ncc是个数,用到的netibuf,网络输入缓冲区。可以这么理解。
netip是网络输入缓冲区的指针。
int
net_read (void)
{
ncc = read (net, netibuf, sizeof (netibuf));
if (ncc < 0 && errno == EWOULDBLOCK)
ncc = 0;
else if (ncc == 0)
{
syslog (LOG_INFO, "telnetd: peer died");
cleanup (0);
/* NOT REACHED */
}
else if (ncc > 0)
{
netip = netibuf;
DEBUG (debug_report, 1,
debug_output_data ("td: netread %d chars/r/n", ncc));
DEBUG (debug_net_data, 1, printdata ("nd", netip, ncc));
}
return ncc;
}
telrcv函数是一个关键的函数,在文件state.c中定义。
和telnet协议状态机有关。
比如如果第一个字节是FF也就是IAC,那么下面的字节是命令字节。命令选项字节。
net_get_char函数和pty_output_byte函数是理解telrcv函数的主要的地方。
其他的语句都和状态机有关。这两个函数是取一个字符,函数放到pty缓冲区里。
void
telrcv (void)
{
register int c;
static int state = TS_DATA;
while ((net_input_level () > 0) & !pty_buffer_is_full ())
{
c = net_get_char (0);
#ifdef ENCRYPTION
if (decrypt_input)
c = (*decrypt_input) (c);
#endif /* ENCRYPTION */
switch (state)
{
case TS_CR:
state = TS_DATA;
/* Strip off /n or /0 after a /r */
if ((c == 0) || (c == '/n'))
break;
/* FALL THROUGH */
case TS_DATA:
if (c == IAC)
{
state = TS_IAC;
break;
}
/*
* We now map /r/n ==> /r for pragmatic reasons.
* Many client implementations send /r/n when
* the user hits the CarriageReturn key.
*
* We USED to map /r/n ==> /n, since /r/n says
* that we want to be in column 1 of the next
* printable line, and /n is the standard
* unix way of saying that (/r is only good
* if CRMOD is set, which it normally is).
*/
if ((c == '/r') && his_state_is_wont (TELOPT_BINARY))
{
int nc = net_get_char (1);
#ifdef ENCRYPTION
if (decrypt_input)
nc = (*decrypt_input) (nc & 0xff);
#endif /* ENCRYPTION */
/*
* If we are operating in linemode,
* convert to local end-of-line.
*/
if (linemode
&& net_input_level () > 0
&& (('/n' == nc) || (!nc && tty_iscrnl ())))
{
net_get_char (0); /* Remove from the buffer */
c = '/n';
}
else
{
#ifdef ENCRYPTION
if (decrypt_input)
(*decrypt_input) (-1);
#endif /* ENCRYPTION */
state = TS_CR;
}
}
pty_output_byte (c);
break;
case TS_IAC:
gotiac:
switch (c)
{
/*
* Send the process on the pty side an
* interrupt. Do this with a NULL or
* interrupt char; depending on the tty mode.
*/
case IP:
DEBUG (debug_options, 1, printoption ("td: recv IAC", c));
send_intr ();
break;
case BREAK:
DEBUG (debug_options, 1, printoption ("td: recv IAC", c));
send_brk ();
break;
int
net_get_char (int peek)
{
if (peek)
return *netip;
else if (ncc > 0)
{
ncc--;
return *netip++ & 0377;
}
return 0;
}
void
pty_output_byte (int c)
{
*pfrontp++ = c;
}
这里是第二阶段相关的函数。比较好理解。
主要的功能是把缓冲区的字符放到/dev/pty里面
a b c d e f g
| |
pbackp pfrontp
上面的pfrontp指针指向的是字母g,如果再输入一个字符h,那么pfrontp指针就指向字符h。
上面的pbackp指针指向的是字母b,如果要拿出一个字符,那么应该先拿出字符b,然后是c,再然后是d。
void
ptyflush (void)
{
int n;
if ((n = pfrontp - pbackp) > 0)
{
DEBUG (debug_report, 1,
debug_output_data ("td: ptyflush %d chars/r/n", n));
DEBUG (debug_pty_data, 1, printdata ("pd", pbackp, n));
syslog (LOG_NOTICE, "ptyflush pbackp = %s", pbackp);
n = write (pty, pbackp, n);
}
if (n < 0)
{
if (errno == EWOULDBLOCK || errno == EINTR)
return;
cleanup (0);
/* NOT REACHED */
}
pbackp += n;
if (pbackp == pfrontp)
pbackp = pfrontp = ptyobuf;
}
5. telnet测试端口是否通怎么关闭?
在telnet中,要关闭测试端口的连接,可以按照以下步骤进行:
打开命令提示符(Windows)或终端(Mac、Linux)。
输入以下命令来连接目标主机和端口:
复制代码
telnet <host> <port>
其中 <host> 是目标主机的IP地址或域名,<port> 是您要测试的端口号。
如果连接成功,则您将在命令提示符(或终端)中看到一条消息,表示已经成功连接到目标主机的指定端口。您可以与该端口进行通信并发送/接收数据。
要关闭 Telnet 连接,请按下键盘上的组合键 Ctrl + ]。这将进入 Telnet 的命令模式。
在 Telnet 命令模式中,输入 quit 或者 exit 命令来退出 Telnet 连接。
您将返回到命令提示符(或终端),表示已经成功关闭了 Telnet 连接。
请注意,以上步骤是在命令提示符(或终端)中使用 Telnet 测试端口通信并关闭连接的一般方法。具体实现方式可能因操作系统和网络环境的不同而有所差异,请根据您的情况进行调整。另外,由于 Telnet 传输数据是以明文形式进行的,因此建议在生产环境中使用更安全的替代方案,如 SSH 等。
6. Server2019服务器如何开启telnet?
在 Windows Server 2019 上开启 Telnet 功能,您可以按照以下步骤进行操作:
1. 打开 Server Manager:在任务栏上搜索并打开 "Server Manager"。
2. 点击左侧导航栏中的 "Manage",然后选择 "Add Roles and Features"。
3. 在 "Before You Begin" 页面,点击 "Next"。
4. 在 "Installation Type" 页面,选择 "Role-based or feature-based installation",然后点击 "Next"。
5. 在 "Server Selection" 页面,选择您要开启 Telnet 功能的服务器,并点击 "Next"。
6. 在 "Server Roles" 页面,直接点击 "Next"。
7. 在 "Features" 页面中,滚动到找到 "Telnet Client" 选项,勾选它,并点击 "Next"。
8. 在 "Confirmation" 页面,点击 "Install" 来安装 Telnet 功能。
9. 安装完成后,您可以在 "Results" 页面上看到安装结果。点击 "Close" 关闭安装向导。
这样,您的 Windows Server 2019 就已经开启了 Telnet 功能。之后,您可以在命令提示符下尝试使用 Telnet 命令。
请注意,尽管 Telnet 方便远程访问服务,但它以明文传输数据,安全性较低。为了提高安全性,建议您考虑使用更加安全的替代方案,如 SSH。如需详细信息,建议查阅相关文档或咨询相关技术专家。
7. linux如何查看telnet端口是否开放?
您可以使用Linux的telnet命令来测试端口是否开放。具体步骤如下:
1. 打开终端,输入telnet命令,后面跟上要测试的IP地址和端口号,例如telnet 192.168.1.1 80。
2. 如果端口开放,终端会显示连接成功的提示信息,例如“Connected to 192.168.1.1.”。
3. 如果端口未开放,则会显示“无法打开到主机的连接”或“连接超时”。
本文标签:
很赞哦! ()