与服务进行交互以实现开发目的的最佳方式

时间:2013-06-07 09:08:59

标签: python bash security sockets netcat

假设我有一项与之互动的服务。使用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. 发送请求例如“hello”
  2. 得到答复:“你好吗?”
  3. 在这种情况下,服务非常简单,但假设我有一个打印选项菜单或欢迎屏幕的服务,我必须阅读所有这些内容并手动查找对我发送的命令的响应(使用for _在xrange ...)。

    总结一下:通过仅考虑输入命令的响应来与这种服务进行交互的最佳方式是什么?

    我不知道python是否适合这个东西。我尝试使用套接字,但由于函数recv

    ,它甚至比telnet更糟糕

1 个答案:

答案 0 :(得分: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