1

假设我有一个要与之交互的服务。使用 netcat 会是这样的:

> nc 127.0.0.1 8080
hello
hi how are you?

我想自动化与此服务的交互,以执行一些攻击,例如格式字符串。所以我创建了一个 Python 脚本,让它工作起来真的很痛苦。这是代码:

    t = Telnet(HOST, PORT)
    t.write('2\n')
    for _ in xrange(10)): print(t.read_some())
    t.write('3\n')
    for _ in xrange(12)): print(t.read_some())

这里的问题是服务的响应。我期望从这个脚本中得到的行为如下:

  1. 发送请求,例如“你好”
  2. 得到回应:“嗨,你好吗?”

在这种情况下,服务非常简单,但假设我有一个打印选项菜单或欢迎屏幕的服务,我必须阅读所有这些内容并手动找到对我发送的命令的响应(使用 for _ in xrange 。 ..)。

总结一下:仅考虑输入命令的响应,与此类服务交互的最佳方式是什么?

我不知道 python 是否适合这些事情。我尝试使用套接字,但由于功能 recv,它甚至比 telnet 更糟糕

4

1 回答 1

0

看看expect,它在用户提供的脚本的帮助下与交互式程序“对话”。

用法

expect ./interact

或制作interact可执行文件(chmod a+x interact):

./interact

interact以下脚本在哪里:

#!/usr/bin/expect
spawn nc 127.0.0.1 8080
send -- "hallo\r"
expect "hi how are you?\r"

这只是一个简单的示例,手册页充满了深入的解释,并且还有安装附带的示例脚本。

参考资料
* http://linuxaria.com/howto/2-practical-examples-of-expect-on-the-linux-cli?lang=en

于 2013-06-07T09:23:16.053 回答