Захват сессии telnet - pexpect и telnetlib слишком медленные - PullRequest
0 голосов
/ 03 апреля 2012

Я хочу вытащить таблицы соединений из брандмауэра.В некоторых случаях это может быть более 200 000 строк

"TCP за пределами 46.33.77.20:53415 внутри 10.16.25.63:80, бездействия 0:00:04, байтов 3230, флагов UIOB"

и т. п.

Я попытался реализовать и pexpect, и telnetlib, чтобы получить эти таблицы.К сожалению, время ожидания истекло и / или умерло с чем-то большим, чем 40 тыс.

реализация pexpect:

connect.send("sho conn\n")
connect.expect("<--- More --->", timeout=360)
tmp_txt = connect.before

реализация telnetlib:

telnet.write("sho conn\n")
tmp_text = telnet.read_until("<--- More --->")

Существует ли более надежный методзахватить эту информацию?Я контролирую количество строк, заданных за один раз, значением пейджера (до этого).Кроме того - я наблюдаю за процессором на брандмауэре, поэтому я знаю, что он отображает соединения.Либо их слишком много, либо pexpect или telnetlib слишком быстро справляются.

Спасибо.

1 Ответ

0 голосов
/ 20 сентября 2012

Похоже, ваш подход меня устраивает. Я также вывел бы выходные данные (чтобы поддерживать низкий уровень загрузки ЦП брандмауэра), а затем захватывал выходные данные на полный экран за раз.

Если вы сталкиваетесь с ошибками тайм-аута, почему бы не изменить свой ожидаемый цикл как ожидающий каждую строку или определенные строки вывода (я предполагаю, что он имеет обычный формат), а затем отправлять пробел только тогда, когда он получает «больше» строка для следующего экрана. Я часто использовал этот шаблон для обработки длинных потоков вывода, которые могут останавливаться в разных местах.

Вы упоминаете, что процесс python умирает, мы не сможем вам там помочь - если вы не будете более подробно знать, какое исключение возникает.

...