2016-12-27 65 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那里。)