2015-07-10 1 views
1

Я больше всего знаком с powershell и python, поэтому решение, использующее любой из них, было бы идеальным.Сценарий сеанса Telnet с итеративной командой

У меня возникла ситуация, когда старое устройство с последовательным интерфейсом Ethernet-адаптера перезагрузилось и упало с нашей сети. Я подключился к кроссовому кабелю и использовал wirehark, чтобы найти его IP-адрес, и увидел, что arp req (206.250.11.x - не то, на что он был установлен раньше, очевидно). Portscan дал мне несколько опций, а один поднял telnet подскажите, что я искал.

Я смог подключиться и попробовать наши пароли по умолчанию - после подключения к нему запрашивается 4-значный вывод - но никто не работал.

Я хочу написать скрипт python, который запускает сеанс, ждет второй, вводит первый вывод: 0000 видит, говорит ли он: «Соединение с хостом потеряно». и, если нет, сообщите о том, какой PIN-код он использовал.

У меня есть Pinging программу, которую я написал некоторое время назад, который использовал subprocess.Popen и думаю, что я мог бы адаптировать его запустить телнет сессию:

telneter = subprocess.Popen ([ «телнет», имя хоста «9999 "], stdout = subprocess.PIPE) .stdout.read() Я также видел, что есть какой-то модуль telnet python, который можно импортировать.

Если у меня есть файл с именем «pins.txt», который представляет собой файл, который имеет 0000-9999 с одной записи на строку, как я могу лучше всего сделать следующее:

1) Запуск Telnet по адресу/порт 2) Подождите, пока он не запросит PIN-код (обычно менее секунды). 3) Введите первую строку файла pins.txt. 4) Проверьте, закончилась ли сессия и напечатано «Соединение с хостом потеряно». 5) Сообщите, какой вывод не терпит неудачу, и сеанс остается в живых?

Большое вам спасибо за помощь! Я буду работать над этим больше, но это то, что мы хотели бы получить и запустить снова скорее, чем позже, поэтому я еще не сделал достаточно исследований.

Редактировать: Я пытался соединиться с 25-контактным последовательным преобразователем с другой стороны, но вычеркнул адаптер, так что это больше не вариант.

Edit2: Я также попытался использовать telnetlib с telnetlib.Telnet (хост), но я не могу получить поток данных и перезапустить сеансы, чтобы перебирать список контактов.

ответ

3

Для таких вещей довольно часто используется pexpect, если вы хотите использовать Python для чего-то, что должно быть интерактивным. pexpect основан на концепции expect.

Он очень похож на popen, как вы привыкли, за исключением того, что он утюги из грубых краев и поставляется с утилитами, чтобы сделать жизнь немного легче.

Общий формат

x = pexpect.spawn("telnet") 
x.expect("Connected") 
x.sendline("thing") 
x.expect("Connection ended") 

This example несколько похожа на то, что вы хотите, за исключением того, что он будет работать вечно. Я предполагаю, что вы можете легко изменить его, чтобы делать то, что вы хотите, основываясь на своем опыте.