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。为什么?它应该返回单词。
这是输出:
Pasul 1
路线的视图> show ip route 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
AS Hops 1
路线标记19214
MPLS标签:无
路线的视图>
Pasul 2
假
答案 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)
答案 1 :(得分:0)
您需要将来自telnet会话的字符串存储到y
才能生效。目前,由于此行,您将"show ip route 192.0.2.1\r\n"
存储在y
中:
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