在网络服务器上编写 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替代方案