telnet登入远程主机、测试TCP链接是否可达

功能说明:telnet可以用于测试TCP socket链接是否连通(某个TCP端口是否开放)。但telnet不能测试 UDP socket链接,因为telnet基于TCP 协议,不支持 UDP。

语  法:

1 基本命令格式

telnet [选项] 主机 [端口]

2 复杂命令格式

telnet [-8acdEfFKLrx][-b<主机别名>][-e<脱离字符>][-k<域名>][-l<用户名称>][-n<记录文件>][-S<服务类型>][-X<认证形态>][主机名称或IP地址<通信端口>]

补充说明:

1telnet一般用于登入远程主机,与之类似的工具是ssh。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的 能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个 telnet会话,必须输入用户名和密码来登录服务器。但是telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh了。

2 curl可以测试HTTP服务,telnet也可以测试HTTP服务。

3 那怎么测UDP?可以使用以下工具:

  • nc -u
  • nmap -sU
  • tcpdump
  • 应用层工具dig测试DNS

选  项:

-4    强制IPv4地址解析

-6    强制进行IPv6地址解析

-8   允许使用8位字符资料,包括输入与输出。

-a   尝试自动登入远端系统(已很少使用)。

-b<主机别名>   使用别名指定远端主机名称。

-c   不读取用户专属目录里的.telnetrc文件。

-d   启动排错模式。

-e<脱离字符>   设置escape字符(默认是 Ctrl + ]),用于优雅退出telnet例如:telnet -e ^X host port

-E   滤除脱离字符。

-f   此参数的效果和指定”-F”参数相同。

-F   使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。

-k<域名>   使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。

-K   不自动登入远端主机。

-l<用户名称>   指定要登入远端主机的用户名称(主要用于传统 telnet server)。例如:telnet -l root 192.168.1.10

-L   允许输出8位字符资料。

-n<记录文件>   指定文件记录通信数据(调试用)。用法:telnet -n telnet.log host port

-r   使用类似rlogin指令的用户界面。

-S<服务类型>   设置telnet连线所需的IP TOS信息。

-x   假设主机有支持数据加密的功能,就使用它。

-X<认证形态>   关闭指定的认证形态。

telnet交互模式下的常用命令:

连接到远程服务后,按:

Ctrl + ]

进入 telnet 命令模式。常用命令有:

quit        退出 telnet

close      关闭当前连接

status     查看连接状态

open host port     打开新连接

set localecho        本地回显

toggle crlf           切换 CRLF

    例:

1 连接到远程主机的telnet服务

telnet 192.168.120.206

如果连接失败,排查步骤如下:

  • 确认ip地址是否正确?
  • 确认ip地址对应的主机是否已经开机?
  • 如果主机已经启动,确认路由设置是否设置正确?(使用route命令查看)

如果主机已经启动,确认主机上是否开启了telnet服务?(使用netstat命令查看,TCP的23端口是否有LISTEN状态的行),可以使用以下命令启动telnet服务service xinetd restart

  • 如果主机已经启动telnet服务,确认防火墙是否放开了23端口的访问?(使用iptables-save查看)

主机名可以换成域名,例如:

telnet www.baidu.com

2 测试 TCP 连接是否可达

telnet 127.0.0.1 6379

可能出现以下结果:

  • 连接成功,意味着6379端口开放 + TCP 通
  • Connection refused,意味着端口未监听
  • Connection timed out,意味着网络 / 防火墙问题

这是 telnet 最常见用途(80% 场景)。

3 作为“通用 TCP 客户端”

telnet 不关心上层协议,只管:把你输入的字符,通过 TCP 发给对方。所以你可以用它来测试:HTTP、SMTP、Redis(文本命令)或自定义 TCP 文本协议。

示例:测试 HTTP

telnet example.com 80

然后输入:

GET / HTTP/1.1
Host: example.com

示例:测试 Redis

telnet 127.0.0.1 6379

输入:

PING

返回:

+PONG

telnet服务常用配置:

service telnet
{
    disable = no #启用
    flags = REUSE #socket可重用
    socket_type = stream #连接方式为TCP
    wait = no #为每个请求启动一个进程
    user = root #启动服务的用户为root
    server = /usr/sbin/in.telnetd #要激活的进程
    log_on_failure += USERID #登录失败时记录登录用户名
}

#配置允许登录的客户端列表
only_from = 10.0.0.2 #只允许10.0.0.2登录

#配置禁止登录的客户端列表
no_access = 10.0.0.{2,3,4}  #禁止10.08.0.2、10.0.0.3、10.0.0.4登录

#设置开放时段
access_times = 9:00-12:00 13:00-17:00 # 每天只有这两个时段开放服务

#配置用户只从某个地址登录telnet服务
bind = 10.0.0.2

telnet的局限性:

  • 明文传输用户名、密码等敏感数据(非常不安全),不适合生产环境登录。生产环境登录应该使用ssh。
  • 不能测试 UDP。
  • 不适合二进制协议,因为会乱码,只适合文本。

现代环境中 telnet 的“正确定位”是TCP 端口 / 文本协议的调试工具,而不是登录工具。

其他相关的网络工具:

  • nc (netcat):TCP / UDP 万能工具
  • curl:测试HTTP / HTTPS
  • ssh:用于安全登录
  • nmap:用于端口扫描,也能测 UDP

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注