如何将文件输入到Telnet中

16

我想要理解HTTP和头部信息,所以我在尝试使用Telnet发送请求。为了不用一遍又一遍地输入相同的内容,我决定写一个包含我需要的所有命令的小文本文件。

我的文本文件非常简单,内容如下:

GET /somefile.php HTTP/1.1
Host: localhost

然后我尝试使用io重定向将其提供给telnet:

$ telnet localhost 80 < telnet.txt

但我得到的所有输出都是

Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

我做错了什么?


1
7年后重新审视这个问题,我认为使用netcat提出的解决方案存在文件中CRLF/LF问题。HTTP协议要求使用CRLF行终止符,而不能仅使用LF。 - knittl
4个回答

21

telnet并不是完成这个任务的正确工具。尝试使用:

 netcat localhost 80 < telnet.txt

顺便提一下,如果您的计算机上没有安装该工具,您可以在这里获取:

http://netcat.sourceforge.net/


我该如何获取输出?我需要HTTP/HTML响应。 - knittl
当我在标准输入上输入请求时,它会显示,但是当使用“nc < file”时,它不会显示任何内容(尽管请求似乎已经成功)。 - knittl
6
运行 cat telnet.txt - | nc localhost 80 命令即可。cat 命令会先发送指定文件 telnet.txt 的内容,再发送标准输入的内容到 netcat - Andreas Wederbrand
在我的情况下,我只能使用 telnet,由于安全限制无法安装 nc。我还创建了一个文本文件,但与其将文件传递给 telnet,我将内容复制到终端剪贴板缓冲区中,然后在建立 telnet 连接后粘贴。 - shonky linux user
3
如果您使用@AndreasWederbrand分享的语法:“cat telnet.txt - | telnet localhost 80”,那么telnet是完成此任务的正确工具。 - baptx
显示剩余2条评论

7
问题在于您立即将所有输入传递给telnet命令,而不等待其输出。在全部输入文件被提供后,它会自动导致telnet“挂起”,因为输入流到达其结尾(EOF)。当这种情况发生时,Telnet可能仍处于等待连接到远程服务器的第一毫秒或微秒。
您要做的是,发送一个命令给telnet,然后等待它执行其工作,也就是等待服务器的响应,然后发送下一个命令,以此类推,直到所有发送的命令都被实际处理后才最终挂机。
为此,请使用“expect”脚本代替快速提供文本文件。'Expect'是完成此任务的常用工具。

1
上面的建议相当不错,除了telnet的端口号是23而不是80。所以如果你来这里寻找如何将数据传输到telnet端口(就像我一样,用于配置以太网控制的电源开关),请使用端口23。

0

我不确定用telnet是否可行。你看过netcat吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接