Размер буфера telnetlib read_until - PullRequest
1 голос
/ 28 марта 2012

Справочная информация. Я тяну таблицу соединений брандмауэра, чтобы создать список лучших собеседников / слушателей.

В некоторых случаях таблица соединений содержит более 200 000 записей.Я использую telnetlib для удаленного доступа к брандмауэру и захвата таблицы соединений.Я использую read_until для захвата данных.Однако, когда таблица превышает 40 000 записей, она зависает.Когда я его убиваю, я вижу следующее:

Traceback (most recent call last):
File "test2.py", line 152, in ?
main()
File "test2.py", line 120, in main
tmp_text = telnet.read_until(pager_text)
File "/usr/lib/python2.3/telnetlib.py", line 317, in read_until
self.process_rawq()
File "/usr/lib/python2.3/telnetlib.py", line 488, in process_rawq
self.cookedq = self.cookedq + buf[0]
KeyboardInterrupt

Я бью в какой-то буфер?Как лучше получить эти данные?

Спасибо.

1 Ответ

2 голосов
/ 28 марта 2012

Последний раз, когда я использовал telnetlib, был довольно давно, но ... насколько мне известно, использование read_until лучше всего подходит для сессий с большей интерактивностью и меньшим количеством огромных дампов данных.Идея состоит в том, что вы ожидаете ответа определенного шаблона, а затем снова общаетесь.

Вы пробовали один из других вариантов чтения, таких как read_some, и создавали свой ответ на своей локальной стороне?Это определенно может быть вопросом буфера, как вы сказали.

Вы также можете попробовать read_until и задать для него значение тайм-аута и посмотреть, сможете ли вы получить хотя бы часть данных, а затем снова прочитать.

Кроме того, я заметил, что выиспользуя python2.3.Если вы не привязаны к этой версии, я заметил в источнике telnetlib, что более поздние изменения специально улучшили обработку тайм-аута.

...