Лучший способ взаимодействия со службой в целях эксплуатации

Предположим, у меня есть служба для взаимодействия. При использовании 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 _ в xrange . ..).

Подводя итог: как лучше всего взаимодействовать с такой службой, принимая во внимание ТОЛЬКО ответ на команду ввода?

Я не знаю, подходит ли для этого Python. Я пытался использовать сокеты, но это было даже хуже, чем telnet из-за функции recv


person blueSurfer    schedule 07.06.2013    source источник
comment
Вы проверили socket.makefile()? Это позволяет вам читать строки из сокета, как если бы вы читали файл (for line in sock.makefile():)   -  person akaIDIOT    schedule 07.06.2013
comment
Но похоже проблема осталась. Мне пришлось бы проверять файл и вручную пропускать строки, чтобы найти ответ на отправленную команду.   -  person blueSurfer    schedule 07.06.2013


Ответы (1)


Взгляните на 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

person Micha Wiedenmann    schedule 07.06.2013
comment
Выглядит многообещающе. Можно ли интегрировать это с python? Например, взять ответ и использовать его в скрипте Python? - person blueSurfer; 07.06.2013