当前位置: 首页 > news >正文

telnet 基本用法

telnet 命令作为一个轻量级、通用的 TCP 客户端和网络调试工具,在以下场景仍然非常有用:

  1. 快速测试端口开放性: 检查目标机器的某个 TCP 端口是否可达、是否有服务在监听。
  2. 调试应用层协议: 手动与 HTTP、SMTP、POP3、IMAP、FTP(控制通道)、Redis、Memcached 等基于文本的协议的服务进行交互,观察原始请求和响应。这对于理解协议行为、诊断服务问题非常有效。
  3. 验证服务初始响应: 连接后,许多服务会立即发送一个欢迎标语或状态信息(如 SMTP 的 220 消息),telnet 可以立即看到这些信息。

使用 Telnet 的基本语法

telnet [hostname or IP address] [port]
  • hostname or IP address: 目标服务器的主机名或 IP 地址。
  • port: 目标服务监听的 TCP 端口号。

退出 Telnet 会话:

  • 如果连接成功,通常能看到 Escape character is '^]'. 信息。

  • 此时,按 Ctrl + ] (先按住 Ctrl 键,再按右方括号键 ]) 会进入命令模式,显示 telnet> 命令提示符。

  • telnet> 提示符下输入 quitq,然后按回车,即可完全退出 Telnet。

实用 Telnet 示例

示例 1:测试 TCP 端口是否开放(基本连接)

目标: 检查主机 192.168.1.100 上的 8080 端口是否有服务在监听。

telnet 192.168.1.100 8080

可能结果:

  • 连接成功 (端口开放,服务监听):

    Trying 192.168.1.100...
    Connected to 192.168.1.100.
    Escape character is '^]'.  
    
  • 连接被拒绝 (端口无服务监听):

    Trying 192.168.1.100...
    telnet: Unable to connect to remote host: Connection refused
    
  • 连接超时 (防火墙阻断/网络不通/主机宕机):

    Trying 192.168.1.100...
    telnet: Unable to connect to remote host: Connection timed out
    

示例 2:调试 HTTP 服务(手动发送 HTTP 请求)

目标: 手动向运行在 www.example.com 端口 80 的 Web 服务器发送一个简单的 HTTP GET 请求,获取根路径 (/) 的内容。

telnet www.example.com 80

连接成功后(看到 Connected...Escape character...),在光标处手动输入以下内容(必须精确,包括空格和两次回车)

GET / HTTP/1.1
Host: www.example.com

(注意:在输入完 Host: www.example.com 后,需要按 两次 回车键来表示 HTTP 请求头结束)

结果:服务器会返回完整的 HTTP 响应,包括状态行、响应头和响应体(HTML 源代码)。

HTTP/1.1 200 OK
Date: Mon, 03 Jun 2025 12:34:56 GMT
Server: Apache/2.4.41 (Unix)
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Connection: close<!DOCTYPE html>
<html>
<head><title>Example Domain</title>... (网页HTML内容) ...
</html>
Connection closed by foreign host. <-- 服务器关闭连接

用途: 检查 Web 服务器是否响应、观察原始 HTTP 头和内容、诊断负载均衡或代理问题、测试简单的 API 端点(如果知道 URL 和需要的 Headers)。

示例 3:调试 SMTP 邮件服务器(发送测试邮件)

目标: 手动连接邮件服务器 mail.example.com 的 SMTP 端口 25,模拟发送一封测试邮件。

telnet mail.example.com 25

连接成功后,服务器通常会发送一个 220 开头的欢迎消息。然后你可以按照 SMTP 协议的命令顺序进行交互(输入一行命令,按一次回车,观察服务器响应):

220 mail.example.com ESMTP Postfix
HELO myclient.example.com        <-- 向服务器标识你的客户端(域名任意)
250 mail.example.com Hello myclient.example.com [your.ip.add.ress]
MAIL FROM: <sender@example.com>  <-- 发件人地址(可以虚构)
250 2.1.0 Ok
RCPT TO: <recipient@example.com> <-- 收件人地址(必须是服务器接受的地址,或测试邮箱)
250 2.1.5 Ok
DATA                            <-- 告诉服务器要开始传输邮件内容了
354 End data with <CR><LF>.<CR><LF>  <-- 提示以单独一行的 `.` 结束邮件内容输入
Subject: Test email via Telnet   <-- 邮件主题<-- 空行分隔头部和正文
This is the body of my test email sent using telnet.
.                               <-- 单独一行输入一个点 `.` 表示邮件内容结束
250 2.0.0 Ok: queued as ABC123XYZ
QUIT                            <-- 退出会话
221 2.0.0 Bye
Connection closed by foreign host.

用途: 测试邮件服务器是否可连接、诊断邮件发送失败原因(观察每一步的响应码和消息)、理解 SMTP 协议流程。注意: 很多现代邮件服务器有反垃圾邮件措施,可能拒绝来自非授权 IP 或格式不规范的请求。

示例 4:连接 Redis 数据库

目标: 连接运行在 redis-server 主机 6379 端口的 Redis 服务,执行简单的命令。

telnet redis-server 6379

连接成功后(Redis 可能没有欢迎信息,直接显示光标),输入 Redis 协议命令(注意格式):

PING          <-- 发送 PING 命令,Redis 应该回复 PONG
+PONG         <-- Redis 的响应
SET mykey "Hello from Telnet"  <-- 设置一个键值对
+OK           <-- Redis 回复 OK 表示成功
GET mykey     <-- 获取键 mykey 的值
$18           <-- 表示接下来是一个长度为 18 的字符串
Hello from Telnet <-- 值内容
QUIT          <-- 告诉 Redis 关闭连接(Redis 协议命令)
+OK           <-- Redis 确认
Connection closed by foreign host. <-- 连接关闭

用途: 快速检查 Redis 是否在线、测试 Redis 命令、诊断连接问题。

如何理解 Escape character is '^]'.

这是一个完全正常的成功连接提示!

详细解释

  1. 连接已成功建立
    • TCP 三次握手已完成
    • 目标服务器(192.168.1.100)的 8080 端口正在监听
    • 网络路径畅通无阻(防火墙已放行)
  2. Escape character is '^]' 的含义
    • 这是 Telnet 客户端的标准提示信息(不是错误!)
    • 表示您现在处于 Telnet 的交互模式
    • ^] 是退出交互模式的快捷键(按 Ctrl + ]
  3. 当前状态
    • 光标在闪烁,等待您输入内容
    • 服务端已准备好接收应用层协议数据(如 HTTP 请求)
    • 服务端可能在等待您发送第一个指令(取决于服务类型)

接下来该做什么?

情况 1:如果您连接的是 HTTP 服务
# 手动发送 HTTP 请求(注意大小写和空行)
GET / HTTP/1.1
Host: 192.168.1.100:8080# 输入完成后按两次回车
情况 2:如果您连接的是其他服务
  • 等待服务端的欢迎信息(如 SMTP 服务会发送 220 ...
  • 输入该服务支持的协议命令(Redis/SMTP/Memcached 等)
情况 3:只想验证端口连通性
  1. Ctrl + ](进入 telnet 命令模式)

  2. 输入 quit 退出

    telnet> quit
    Connection closed.
    

示例输出流程

$ telnet 192.168.1.100 8080
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is '^]'.   # ← 您当前看到的状态# 此时输入 HTTP 请求
GET / HTTP/1.1
Host: 192.168.1.100# 服务器响应
HTTP/1.1 200 OK
Content-Type: text/html
...# 按 Ctrl+] 退出
^]
telnet> quit
Connection closed.

为什么不是所有连接都显示这个提示?

  • 有些服务会立即发送欢迎信息(如 SMTP 的 220 响应),覆盖此提示.
  • 有些服务会主动关闭连接(如果收到非法连接).
  • 只有当服务端保持连接打开并等待客户端发送数据时,才会显示这个提示.

总结

Escape character is '^]' 是 Telnet 连接成功的明确标志!它表示:

  1. 端口开放 ✅
  2. 服务可用 ✅
  3. 连接已建立 ✅
  4. 您可以开始发送应用层协议数据了

下一步操作完全取决于您连接的服务类型。对于 HTTP 服务,建议发送测试请求;对于其他服务,等待协议提示或发送协议命令。

http://www.xdnf.cn/news/757891.html

相关文章:

  • Java并发编程中任务调度与线程池的配置优化
  • 大规模真实场景 WiFi 感知基准数据集
  • SSL/TLS 协议详解:安全通信的基石
  • C++修炼:位图和布隆过滤器
  • 布隆筛选详解
  • Ansible自动化运维工具全面指南:从安装到实战应用
  • 【Go语言生态】
  • Vue初始化脚手架
  • 数据库,Spring Boot,数据源
  • 第13讲、Odoo 18 配置文件(odoo.conf)详细解读
  • 6.1 英语复习笔记 3
  • 如何利用大语言模型生成特定格式文风的报告类文章
  • Redis分布式锁实现指南
  • 《P3959 [NOIP 2017 提高组] 宝藏》
  • 继承与多态
  • 篇章七 数据结构——栈和队列
  • 查看make命令执行后涉及的预编译宏定义的值
  • Python数学可视化——环境搭建与基础绘图
  • 力扣刷题(第四十四天)
  • 主数据编码体系全景解析:从基础到高级的编码策略全指南
  • GEE:获取研究区的DEM数据
  • RocketMQ 学习
  • 性能优化 - 案例篇:数据一致性
  • 清理 pycharm 无效解释器
  • CVE-2021-28164源码分析与漏洞复现
  • DDD架构
  • 历年西安邮电大学计算机保研上机真题
  • 鸿蒙OS基于UniApp的区块链钱包开发实践:打造支持鸿蒙生态的Web3应用#三方框架 #Uniapp
  • 基于Dify实现各类报告文章的智能化辅助阅读
  • 攻防 FART 脱壳:特征检测识别 + 对抗绕过全解析