据我所知,Telnet是一种协议,与HTTP一样多。我有这样的想法,即在建立初始TCP连接之后,Telnet客户端会将一些特定于telnet的代码发送到另一端的服务器,在这种情况下是HTTP服务器。但由于HTTP服务器不了解Telnet特定代码,它应该抛出错误或丢弃连接等。但实际上,如果我们键入正确的HTTP标头并发送它们,我们可以telnet到HTTP服务器并获取页面。怎么会这样?维基百科条目真的没有帮助我理解这个具体点。 (http://en.wikipedia.org/wiki/Telnet#Telnet_data)
答案 0 :(得分:5)
你是对的说telnet是它自己的协议,在几个RFC中有描述。您可以查看wikipedia以查看哪些内容以及解释协议的其他资源。
基本上它的工作方式如下:当您使用telnet连接到服务器时,它将显示服务器发送给您的每个可打印字符。您输入的所有内容都将被发送回服务器。这是连接到Web服务器时检索网页的方法:发送http服务器接受的命令并获得正确的结果。
现在,有一些telnet细节选项。 IIRC,除非服务器首先发送它们,否则不会将它们发送到服务器。这些选项用于启用/禁用本地回显(考虑密码,您不希望登录时看到密码),协商终端大小,协商行尾类型。这些是几个字节长的命令,以字节255开头(称为IAC,解释为命令)。当您连接到telnet服务器时,您的客户端将解释这些并相应地进行回复,所有这些都在后台自动进行,而不会向您显示这些命令。
虽然不是特定于telnet,但telnet服务器也可以发送ANSI escape sequences。那些用于颜色,粗体,光标定位,...一个telnet客户端也将解释它们(或者只是将它们传递给你正在使用的终端模拟器,如xterm)。
如果你想要一些“低级”而不是telnet的东西,它不会解释telnet选项并实际显示你得到的东西,你可能想看看netcat
答案 1 :(得分:4)
Telnet只是一种打开与侦听套接字的TCP连接的简单交互方式。因为telnet客户端盲目地将你输入的内容发送到该套接字,理论上它可以模拟TCP之上的任何其他协议。实际上,不可打印的字符由键盘驱动程序解释是唯一的限制。
HTTP不使用不可打印的字符,除非在HTTP标题和正文之间用两个连续的“换行符”(即“空行”)分隔。
请注意,我不是在谈论HTML正文标记,而是有效负载(例如SOAP正文)。
基本上没有魔法。
让我们看看事物的动态 HTTP支持许多命令,如GET,POST,PUT等...... 每个命令都有其语法,并且存在一个相关的响应,其中包含一致的语法和明确定义的错误代码。 使用telnet连接到HTTP服务器时,打开套接字连接,服务器会分叉线程来管理与客户端的对话。然后,您可以通过键入浏览器将发送的命令来模拟浏览器。每次敲击CR键时,客户端都会将该行提交给服务器。如果命令包含多行,则可以输入多行,每行对应一行命令头。一旦你连续敲击两个CR(即空行),服务器就会认为命令头已完成,并且响应被放在一起并发送回客户端。因为telnet客户端的生命目标是回显收到的字符(除非另有说明),然后您可以在终端窗口中看到响应标题和正文。 Telnet在那里停了下来。浏览器将呈现HTML(如果响应是HTML页面) 我希望澄清一切。
答案 2 :(得分:0)
您可以使用telnet查询http服务器,我经常做一个快速而讨厌的测试 telnet不会发送任何代码。它只是建立连接,但是如果需要,可以发送特定于telnet的代码
这样做......
telnet server.com 80
GET http/1.0 /^m
host: server.com^m
^m
... servers response
^ m =输入密钥
我已经完成了这项工作是在linux中完成的,它可能会有所不同。
DC