2016-04-18 11 views
0
import getpass 
import sys 
import telnetlib 
import re 
import smtplib 

print "Pasul 1" 

HOST = "route-views.routeviews.org" 
user = "rviews" 
password = "" 

tn = telnetlib.Telnet(HOST) 

tn.read_until("login: ", 5) 
tn.write(user + "\r\n") 

tn.read_until("Password: ", 5) 
tn.write(password + "\r\n") 

print tn.read_until(">", 10) 
y = str(tn.write("show ip route 192.0.2.1"+"\r\n")) 

print tn.read_until("free", 10) 
tn.write("exit"+ "\r\n") 

tn.close() 

print "Pasul 2" 

m = re.search('Last', y) 
if m: 
    print (m.group(0)) 
else: 
    print False 

Alles was ich in der Ausgabe suche, gibt mir False zurück. Warum? Es sollte das Wort zurückgeben.Wie suche ich mit re in einer Telnet-Session-Ausgabe?

Dies ist die Ausgabe:

Pasul 1

Route-Ansichten> zeigen 192.0.2.1 ip route

Routing-Eintrag für 192.0.2.1/32

über „BGP bekannt 6447 ", Abstand 20, metrisch 0

Tag 19214, Typ extern

Letzte Aktualisierung von 208.74.64.40 4w0d vor

Routing Descriptor Blocks:

  • 208.74.64.40, von 208.74.64.40 ist

    Routenmetrik vor 4w0d 0, Graf Verkehrsanteil ist 1

    AS Hops 1

    Routen Tag 19214

    MPLS-Label: keine

Route-Ansichten>

Pasul 2

Falsch

Antwort

0

Sie müssen die Zeichenfolge der Telnet-Sitzung zu speichern, in y für diese zu arbeiten. Derzeit sind Sie "show ip route 192.0.2.1\r\n" in y aufgrund dieser Zeile speichern:

y = str(tn.write("show ip route 192.0.2.1"+"\r\n"))

Um das zu tun, was Sie wollen, müssen Sie die tn.read_until("free", 10) speichern, um es später zu suchen. Momentan drucken Sie es nur aus.

Beispiel ersetzen:

print tn.read_until("free", 10) 

mit

y = tn.read_until("free", 10) 
print y 
+0

Vielen Dank! –

0

Sie sind nicht auf die volle Zeichenfolge zu suchen. Ich müsste den Inhalt von y direkt vor der Suche sehen, aber es sieht so aus, als wäre der Wert zum Zeitpunkt der Suche show ip route 192.0.2.1\r\n. Die würde None, wie nach ihren Dokumenten Python re.search zurückgeben.

Ich denke, Sie können etwas wie tn.read_until("$") tun, um die gesamte Sitzung zu lesen. Ansonsten würde ich einfach alle Lesevorgänge in einen String verketten und danach suchen. Also in jedem Lese rufen

y = "%s %s" % (y, tn.read_until('my_val', 5)

+0

so, was soll ich dann tun? –

+0

Siehe aktualisierte Antwort – AndrewSmiley

+0

können Sie es bitte im Code verwenden und es posten? Ich weiß nicht genau, wo Sie wollen, dass ich das hinzufüge, es tut mir leid, ich bin ein Anfänger und ich kämpfe hier :) –