Использование pexpect для автоматизации проверки IP - PullRequest
0 голосов
/ 13 сентября 2018

Моя конечная цель - войти в коммутатор, получить сведения о соседе 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)
...