2016-12-27 2 views
0

Я пытаюсь взять серийный номер с баннера. Я успешно сделал это, сохранив содержимое баннера в файле, но теперь я хотел бы попробовать, не сохраняя его в файле. Ниже приведен фрагмент кода:Получите серийный номер из баннера с помощью Python

import argparse 
import logging 
import paramiko 

def grab_banner(ip_address, port): 
    client = paramiko.SSHClient() 
    client.load_system_host_keys() 
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    try: 
     client.connect(ip_address, port=port, username='username', password='bad-password-on-purpose') 
    except: 
     return client._transport.get_banner() 
def GetSerialNo(ip_address,Banner): 
    fp1=open("Baner","w") 
    fp1.write(Banner) 
    fp1.close() 
    fp2=open("Baner","r") 
    for line in fp2: 
     if re.search("System S/N", line): 
      Serial = line.split() 
     return Serial[2] 
    fp2.close() 


if __name__ == '__main__': 

    logger = logging.getLogger(__name__) 

    parser = argparse.ArgumentParser(description='This is a demo script') 
    parser.add_argument('-s','--ipsetups', help='IP Address') 
    args = parser.parse_args() 
    Setup_File=args.ipsetups 
    fp=open(Setup_File,"r") 
    for line in fp.readlines(): 
     IP = line.strip() 
     logger.info("================================ WORKING on %s ===================================",IP) 
     Banner = grab_banner(IP, 22) 
     serial = GetSerialNo(IP, Banner) 
    logger.info("Serial Number is -> %s",serial) 
    fp.close() 

Приведенный выше код работает отлично, но теперь я пытаюсь сделать это, сохраняя его в какой-либо переменной, а затем захватывая серийный номер. Но я не могу этого сделать. Ниже то, что я пытаюсь сделать:

def get_ip(Setup_File): 
    IPS = [] 
    with open(Setup_File, 'r') as f: 
    for line in f: 
     IPS = line.split() 
     return IPS 

def grab_banner(ip_address, port): 
    client = paramiko.SSHClient() 
    client.load_system_host_keys() 
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    try: 
     client.connect(ip_address, port=port, username='username', password='bad-password-on-purpose') 
    except: 
    return client._transport.get_banner() 

if __name__ == '__main__': 

parser = argparse.ArgumentParser(description='This is a demo script by Mangesh Pardhi.') 
parser.add_argument('-s','--ipsetups', help='PD-Setup IP Address') 
args = parser.parse_args() 
Setup_File=args.ipsetups 
print Setup_File 
IPS = get_ip(Setup_File) 
for IP in IPS: 
logger.info("================================ WORKING on %s ===================================",IP) 
    Banner = grab_banner(IP, 22) 
if "System S/N" in Banner: 
    XXXXXXXXXXHow To procees XXXXXXXXXXx 
    serial = Serial[2] 
logger.info("Serial Number is -> %s",serial) 

ответ

0

Вы можете просто упростить GetSerialNo в исходном коде.

def GetSerialNo(ip_address, Banner): 
     for line in Banner.split('\n'): 
      if re.search("System S/N", line): 
       Serial = line.split() 
       return Serial[2] 

(Конечно, вы уже знаете, что вам не нужен параметр ip_address там.)

Смежные вопросы