【问题标题】:How can telnet connect to an arbitrary port?telnet 如何连接到任意端口?
【发布时间】:2017-04-25 18:03:19
【问题描述】:

通过telnet我可以在任何端口连接到任何服务器,它是如何工作的?该服务器上是否运行了 telnet 服务器守护程序? 如果有,守护程序不应该在特定端口上侦听吗?为什么我可以连接到该服务器上的任意端口? 为什么我可以在 80 端口 telnet 到 127.0.0.1 并从我的 Nginx 获得响应,而无需在我的 Ubuntu 上运行 telnet 守护程序?

【问题讨论】:

    标签: telnet


    【解决方案1】:

    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 等)的服务器的功能。

    【讨论】:

    • 客户端除了打开一个 TCP 连接什么都不做,感觉有点违反直觉。 (毕竟,这是一个 telnet 而不是 TCP 客户端程序)。所以只是确认一下,是不是telnet协议在网络传输过程中与数据格式关系不大,而更多的是在客户端和服务端都将数据转发到一个伪终端中?
    • 当它用于连接远程登录服务器时,远程登录客户端将telnet protocol 与服务器通信。否则它只是一个 TCP 客户端程序,正如您所注意到的。
    猜你喜欢
    • 2018-01-06
    • 2019-06-24
    • 1970-01-01
    • 2015-01-14
    • 2013-12-04
    • 1970-01-01
    • 2012-03-19
    • 2010-10-05
    • 1970-01-01
    相关资源
    最近更新 更多