Telnet 代理与 macOS 行为 | AI生成和翻译

Home 2026.03

问题: Telnet 如何工作?它是否应用 macOS 上的 HTTP 或 HTTPS 代理设置?与 ping(绕过代理)相比,如果配置了代理,telnet 是否会通过代理?


回答:

Telnet 如何工作

Telnet 是一种客户端-服务器应用程序协议,提供对局域网或 Internet 上远程系统虚拟终端的访问。它是一种用于双向 8 位通信的协议。

Telnet 使用 TCP 作为其底层传输协议。客户端向服务器发送命令,服务器以输出响应,允许用户与远程系统的命令行界面进行交互。它主要使用端口 23 进行通信。

以下是连接流程的逐步说明:

  1. 您输入: telnet hostname port
  2. Telnet 客户端将字符转换为称为 Network Virtual Terminal (NVT) 字符的通用字符集,并将其传递到本地 TCP/IP 协议栈。这些 NVT 字符通过 Internet 传输,到达远程计算机的 TCP/IP 栈。
  3. 远程 Telnet 服务器将这些字符转换为远程计算机可理解的格式。远程操作系统从伪终端驱动程序接收它们,并将其传递给适当的应用程序。

关键特性:


telnet 是否使用 macOS HTTP/HTTPS 代理设置?

否,telnet 不会自动使用 macOS HTTP 或 HTTPS 代理设置。

原因如下:

macOS 系统代理设置(在系统设置 → 网络 → 代理中配置)定义:

macOS 对图形应用程序的代理配置处理得很好,但此功能不扩展到 Terminal 中的命令行工作。像 gitnpmpiphomebrew 这样的命令行工具不会自动继承系统代理。

macOS HTTP/HTTPS 代理专门针对 HTTP 协议流量 设计。Telnet 在任意端口建立 raw TCP 连接 —— 它不使用 HTTP 协议,因此 macOS 没有依据将其路由通过 HTTP 代理。

某些图形应用程序(基于 GUI 的软件)不使用系统代理设置。因此,即使在网络级别配置了中介服务器,这些程序也可能忽略它并需要手动配置。如果应用程序根本不支持代理配置,可以使用 Proxifier 等特殊实用程序来拦截流量并将其路由通过配置的代理服务器。


pingtelnet 代理行为比较

工具 协议 是否使用 macOS HTTP 代理? 是否使用 macOS SOCKS 代理? 备注
ping ICMP ❌ 否 ❌ 否 ICMP 在第 3 层运行;代理在第 4/7 层工作
telnet TCP (raw) ❌ 否 ❌ 否(默认) CLI 工具不会自动读取 macOS 代理
Safari / Chrome HTTP/HTTPS ✅ 是 ✅ 是 GUI 应用程序尊重系统代理

ping 为什么绕过代理:
ping 使用 ICMP(Internet Control Message Protocol),它在网络层工作——低于 TCP。代理(HTTP、SOCKS)在传输/应用层运行。代理没有机制拦截 ICMP 流量。

telnet 默认也绕过代理的原因:
telnet 是一个 CLI 工具。macOS 代理系统不会自动配置命令行网络代理。与浏览器不同,telnet 建立 direct TCP 连接,并且不会自行查询 HTTPEnableHTTPSEnableSOCKSEnable 系统设置。


如何强制 telnet 通过代理

如果您希望 telnet(或其他 CLI 工具)通过代理,您有以下选项:

选项 1 — 使用环境变量(针对支持 HTTP 的 CLI 工具):

export http_proxy="http://proxyhost:port"
export https_proxy="http://proxyhost:port"

注意:telnet 本身忽略这些,但像 curlwget 等其他 CLI 工具会尊重它们。

选项 2 — 使用 nc (netcat) 与 SOCKS 代理:

nc -x proxyhost:1080 -X 5 targethost targetport

选项 3 — 使用 Proxifier 或类似工具 强制特定应用程序(包括 CLI 工具)的所有流量通过系统 SOCKS 代理。

选项 4 — 在脚本中动态读取 macOS 代理设置: scutil --proxy 命令允许访问系统代理配置。您可以使用 awk 解析其输出,并在 shell 配置文件中相应导出 http_proxy


总结


参考资料:


Back Donate