【发布时间】:2017-04-25 18:03:19
【问题描述】:
通过telnet我可以在任何端口连接到任何服务器,它是如何工作的?该服务器上是否运行了 telnet 服务器守护程序?
如果有,守护程序不应该在特定端口上侦听吗?为什么我可以连接到该服务器上的任意端口?
为什么我可以在 80 端口 telnet 到 127.0.0.1 并从我的 Nginx 获得响应,而无需在我的 Ubuntu 上运行 telnet 守护程序?
【问题讨论】:
标签: telnet
通过telnet我可以在任何端口连接到任何服务器,它是如何工作的?该服务器上是否运行了 telnet 服务器守护程序?
如果有,守护程序不应该在特定端口上侦听吗?为什么我可以连接到该服务器上的任意端口?
为什么我可以在 80 端口 telnet 到 127.0.0.1 并从我的 Nginx 获得响应,而无需在我的 Ubuntu 上运行 telnet 守护程序?
【问题讨论】:
标签: telnet
telnet 客户端不做任何特殊处理。它在您指定的任何端口上打开与远程服务器的 TCP 连接,通过此连接转发您键入的任何内容,并将从服务器接收到的任何内容显示在屏幕上。
当您telnet 127.0.0.1 80 时,它会打开与localhost 的端口80 的连接,通常Web 服务器已经在其中侦听(在您的情况下为nginx)。
HTTP 客户端知道如何构造 HTTP 请求并通过连接发送它。 telnet 客户端对 HTTP 一无所知,但如果您知道协议,您可以手动创建请求并键入它,telnet 客户端将很乐意通过连接为您发送它。如果另一端(Web 服务器)的程序理解该请求,它将返回一个响应。同样,telnet 客户端不理解一点响应(它只是数据),但它很乐意将响应显示在屏幕上。
您可以使用telnet 连接到(远程或本地)计算机的任何端口,只要有服务器应用程序正在侦听该端口即可。
有一个telnet 服务器,如果我没记错的话,它通常在端口23 上侦听,并且当与它建立连接时,它会启动一个伪终端程序来处理服务器上的登录会话(确切的程序它启动以处理会话取决于操作系统)。如果登录成功,telnet 客户端将与伪终端程序进行对话,该程序将您键入的密钥传递给远程 shell; shell 产生的输出通过伪终端 -> TCP 连接 -> telnet 客户端返回给您。
telnet 服务器已被 SSH 协议弃用,该协议执行相同的操作(以及许多其他操作),但通过连接的所有内容在发送之前在每一端进行加密,并在另一端在使用之前进行解密。这为 telnet 服务器已经提供的服务增加了隐私和安全性。
不过,telnet 客户端仍然很有用,因为它可用于测试使用未加密文本协议(如 HTTP、SMTP、POP3、IMAP 等)的服务器的功能。
【讨论】: