2012-03-27 6 views
1

Hintergrund: Ich ziehe die Verbindungstabelle einer Firewall, um eine Top-Sprecher/Listener-Liste zu erstellen.telnetlib read_until Puffergröße

In einigen Fällen enthält die Verbindungstabelle 200.000 Einträge. Ich verwende Telnetlib, um die Firewall zu entfernen und die Verbindungstabelle zu greifen. Ich verwende read_until, um die Daten zu erfassen. Wenn die Tabelle jedoch größer als 40.000 Einträge ist, hängt es. Wenn ich es töte, sehe ich folgendes:

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 

Bin ich eine Art Puffer? Was wäre eine bessere Möglichkeit, diese Daten zu erhalten?

Danke.

Antwort

2

Das letzte Mal, dass ich telnetlib wurde eine lange Weile zurück, aber ... zum bestem Wissen und Gewissen read_until verwendet, ist am besten geeignet für Sitzungen mit mehr Interaktivität und weniger Vorkommen von großen Daten Dumps. Die Idee ist, dass Sie auf eine bestimmte Musterantwort warten, um dann wieder zu kommunizieren.

Haben Sie eine der anderen Leseoptionen wie read_some ausprobiert und bauen Sie Ihre Antwort auf Ihrer lokalen Seite auf? Es könnte definitiv eine Frage des Puffers sein, wie Sie sagten.

Sie könnten auch versuchen read_until und geben Sie einen Timeout-Wert, und sehen Sie, wenn Sie mindestens einen Teil der Daten erhalten können, und lesen Sie es erneut.

Auch habe ich festgestellt, dass Sie python2.3 verwenden. Wenn Sie nicht an diese Version gebunden sind, bemerkte ich in der Quelle von Telnetlib, dass neuere Änderungen die Timeout-Behandlung speziell verbessert haben.

+0

Danke - Ich werde mit read_some spielen und sehen, ob es hilft. Python 2.3.4 ist der Standard auf unseren Servern und kann leider nicht aktualisiert werden. – BDub

Verwandte Themen