2016-04-18 41 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 

任何我在輸出中搜索它返回我False。爲什麼?它應該返回這個詞。如何在telnet會話輸出中搜索re?

這是輸出:

山口1

路由意見> 顯示IP路由192.0.2.1

路由條目192.0.2.1/32

經「BGP已知6447「,距離20,公制0

標記19214,類型外部

從208.74.64.40 4w0d前

路由描述符塊最後更新時間:

  • 208.74.64.40,從208.74.64.40,前4w0d

    路由度量值爲0,流量份額數爲1

    的跳1

    路由標記19214

    MPLS標籤:無

路由意見>

山口2

回答

0

您需要從telnet會話字符串存儲到y這個工作。目前,您存儲在y"show ip route 192.0.2.1\r\n"由於這一行:

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

爲了做到您打算什麼,你必須存儲tn.read_until("free", 10)能夠以後搜索。目前,您只是將其打印出來。

實例代替:

print tn.read_until("free", 10) 

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

謝謝你這麼多! –

0

你不是搜索上滿弦。我需要在搜索前看到y的內容,但它看起來像搜索時的值是show ip route 192.0.2.1\r\n。根據他們的文檔Python re.search,這將返回None

我認爲你可以做點像tn.read_until("$")來閱讀整個會話。否則,我會將所有讀取連接成一個字符串並在其上搜索。因此,在每次讀取調用

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

+0

所以,我應該怎麼辦呢? –

+0

查看更新的答案 – AndrewSmiley

+0

可以請您在代碼中使用它併發布它嗎?我不知道你想要我補充說的地方,對不起,我是一個初學者,我在這裏苦苦掙扎:) –