【发布时间】:2013-03-24 05:36:58
【问题描述】:
【问题讨论】:
-
例如
telnet telehack.com。 List of examples -
这个评论/例子,比最高评价的答案要好得多 - 如果使用没有 dns 的设备(比如我正在设置的一些 cisco 路由器),只需 nslookup IP先连接,再连接。
【问题讨论】:
telnet telehack.com。 List of examples
你可以的
telnet stackoverflow.com 80
然后粘贴
GET /questions HTTP/1.0
Host: stackoverflow.com
# add the 2 empty lines above but not this one
这是一个成绩单
$ telnet stackoverflow.com 80
Trying 151.101.65.69...
Connected to stackoverflow.com.
Escape character is '^]'.
GET /questions HTTP/1.0
Host: stackoverflow.com
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
...
【讨论】:
HTTP/1.1 400 Bad Request 响应的行的开头有多余的空格。我修好了它并附上了一份成绩单。干杯。
telnet 服务器名 80
GET /index.html↵
↵
↵ 表示“返回”,您需要按两次返回
【讨论】:
GET /index.html后面必须加两个换行符,否则不行。 标题部分的结尾由一个空字段(行)指示,导致传输两个连续的 CR-LF 对。 — from Wikipedia
{ echo "GET /"; sleep 1; } | telnet localhost 80(来自stackoverflow.com/questions/7013137/…)
对于后代,您的问题是如何向 https://stackoverflow.com/questions 发送 http 请求。真正的答案是:您不能使用 telnet,因为这是一个仅可访问 https 的 url。
因此,您可能想使用openssl 而不是telnet,例如这样
$ openssl s_client -connect stackoverflow.com:443
...
---
GET /questions HTTP/1.1
Host: stackoverflow.com
这将为您提供 https 响应。
【讨论】:
nc --ssl stackoverflow.com 443 如果已安装netcat
-crlf 到选项。
nc 不能这样做,但 brew install nmap 提供了带有该选项的 ncat 命令
为了稍微扩展之前的答案,有一些复杂情况。
telnet 不是特别可编写脚本的;您可能更喜欢使用nc(又名netcat),它可以更好地处理非终端输入和信号。
另外,与telnet 不同,nc 实际上允许 SSL(因此https 而不是http 流量——那么您需要端口 443 而不是端口 80)。
HTTP 1.0 和 1.1 之间存在差异。最新版本的协议要求将 Host: 标头包含在请求中 POST 或 GET 行之后的单独行中,并在其后跟一个空行以标记请求标头的结尾。
HTTP 协议要求回车/换行换行结束。许多服务器对此很宽容,但有些则不然。您可能想使用
printf "%\r\n" \
"GET /questions HTTP/1.1" \
"Host: stackoverflow.com" \
"" |
nc --ssl stackoverflow.com 443
如果您回退到 HTTP/1.0,您并不总是需要 Host: 标头,但许多现代服务器无论如何都需要标头;如果多个站点托管在同一 IP 地址上,则服务器无法从 GET /foo HTTP/1.0 知道您的意思是 http://site1.example.com/foo 还是 http://site2.example.net/foo 如果这两个站点都托管在同一服务器上(在没有 @987654336 的情况下) @ 标头,HTTP 1.0 服务器可能只是默认到与您想要的不同的站点,因此您不会得到您想要的内容)。
HTTPS 协议在这些细节上与 HTTP 相同;唯一真正的区别在于会话的初始设置方式。
【讨论】:
{ echo "GET / HTTP/1.1"; echo "Host: example.com"; echo; sleep 1; } | ncat --ssl example.com 443
printf 有任何优势。也许sleep 在某些情况下会有所帮助。
printf 可以做更多的事情,但echo 在这种情况下就足够了。我只是认为与 netcat 共享单行代码会很有用。
ncat,因为 nc 不提供 --ssl。
printf 版本当然也可以简单地通过删除换行符折叠成一行。