Моя конечная цель - войти в коммутатор, получить сведения о соседе CDP, записанные в файл. разобрать IP-адреса и выполнить пинг по IP-адресу и вывести его в файл. Я искал форумы и не нашел ничего действительно относящегося к выключателям. В основном серверы, и я оттуда адаптировался. Но сейчас я застрял.
Я дошел до того, что залогинился в коммутатор, и мои запросы на вход в систему, похоже, записаны в файл, но больше ничего.
Пожалуйста, извините за ошибки в коде. Кроме того, второй блок try находится в стадии разработки. Я новичок в Python и учусь на ходу. Я открыт для любых критических замечаний и предложений. Я хочу знать, что я сделал неправильно, исправить это и построить оттуда.
Заранее спасибо!
import pexpect
import getpass
import sys
import re
import os
import time
try:
switch = raw_input("Host: ")
un = raw_input("Username: ")
pw = getpass.getpass("Password: ")
options = '-q -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oPubkeyAuthentication=no'
prompt = "#"
connection_string = ("ssh %s@%s %s" % (un,switch,options))
child = pexpect.spawn(connection_string, timeout=5)
file_output = open('switch_output.txt','wb+')
child.logfile = file_output
rva12 = "";
child.expect(re.escape("password:"))
time.sleep(1)
child.sendline(pw)
time.sleep(1)
child.expect(prompt)
time.sleep(1)
child.sendline("no page")
time.sleep(1)
child.expect(prompt)
child.sendline("show cdp nei det")
time.sleep(1)
child.expect(prompt)
child.before
file_output.close()
except Exception as e:
print("Failed on login")
print(sys.exc_info()[0].__name__,
os.path.basename(sys.exc_info()[2].tb_frame.f_code.co_filename),
sys.exc_info()[2].tb_lineno)
print(e)
try:
f = open('switch_output.txt', 'r')
pattern_one = re.compile('.*A\d\n|\:\s\d{2,}\.\d{2,}\.\d{1,}.\d{1,}?')
for line in f:
matches = []
if pattern_one.search(line):
matches.append(line.split(':', 1)[-1].strip())
mp = re.compile('\d{2,}\.\d{2,}\.\d{1,}.\d{1,}')
with open('MDF1.txt', 'wb+') as file:
for match in matches:
if mp.search(match):
file.write(match+'\n')
file.close()
for line in open('MDF1.txt','r'):
child.expect(prompt)
child.sendline('ping '+ line)
time.sleep(10)
except Exception as e:
print(sys.exc_info()[0].__name__,
os.path.basename(sys.exc_info()[2].tb_frame.f_code.co_filename),
sys.exc_info()[2].tb_lineno)
print(e)