在网络服务器上编写 telnet 脚本

Posted

技术标签:

【中文标题】在网络服务器上编写 telnet 脚本【英文标题】:Script telnet on webserver 【发布时间】:2011-01-31 08:46:07 【问题描述】:

我想编写 telnet 脚本来测试我的网站输入处理。我可以手动完成:

telnet localhost 8888
...
GET / HTTP/1.1\n
Host: localhost


...html response

但我可以在我的 shell 脚本中将命令传递给 telnet!

我试过了:

(echo "GET / HTTP/1.1\n"; echo "Host: localhost \n\n"; sleep 1) | telnet localhost 8888

它根本不会产生任何结果!

【问题讨论】:

【参考方案1】:

(可能不是唯一的问题) 您应该“echo -en”,并使用单引号关闭字符串。这使得 bash 可以正确解释 \n

问候

【讨论】:

【参考方案2】:

我发现netcat,又名nc,更适合这种任务。

正如 Giuseppe 提到的,您必须修复引用。 bash -e 的替代方法是使用$'this form' 进行引用,其中\n\t 等在解析命令行时由bash 解释,而不是传递给echo。所以这种形式适用于许多不同的实用程序。

【讨论】:

此外,最新版本的 bash 识别“/dev/tcp/host/port”伪文件。通过使用此功能(如果可用),不再需要 telnet。再见 afaik,/dev/tcp 不是 bash 的功能,它依赖于内核配置,或启用的模块,或 ..something。无论如何,一些发行版(包括 ubuntu 和我相信大多数 debian-likes)没有这个功能。但我可能错了.. 有没有比ls /dev/tcp 更好的检查方法?这给了我 ubuntu 9.10 下的“没有这样的文件或目录”。 这取决于构建。这是我的 Ubuntu 上的“man bash”所说的:Bash 在重定向中使用时会专门处理多个文件名,如下表所述: [...] /dev/tcp/host/port 如果主机是有效的主机名或Internet 地址,port 是一个整数端口号或服务名称,bash 尝试打开一个到相应套接字的 TCP 连接。注意:为 Debian 打包的 Bash 不支持使用 /dev/tcp 和 /dev/udp 文件。 (继续)所以这取决于特定的构建。无论如何,这不是内核功能。 Debian(和 Ubuntu)实际上并不支持它。问候 很奇怪。我一直认为这是通过设备驱动程序实现的,但它实际上是一个 bash 问题。此外,看起来 Karmic(Ubuntu 9.10)中当前的 bash 实际上是使用此功能编译的。我站得更正了。更多关于这个问题的历史,bugs.launchpad.net/ubuntu/+source/bash/+bug/215034【参考方案3】:

“如何编写 x 脚本?”的常见答案。是“expect

【讨论】:

以上是关于在网络服务器上编写 telnet 脚本的主要内容,如果未能解决你的问题,请参考以下文章

网络扫描神器Nmap常用操作方法详解以及使用脚本爆破telnet密码

Python网络编程7-对Telnet流量进行解码分析与拦截

powershell 脚本 - WINDOWS - 网络:测试网络连接/ Telnet替代方案

traceroutenetstatpingtelnet 网络工具 之 telnet

telnet小脚本

计算机网络——应用层之远程终端协议(TELNET)简单网络管理协议应用进程跨越网络的通信