Python Forum

Full Version: Multi thread telnet issue
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Below script is working, however randomly few devices showing as time out, but those devices are reachable to able to telnet.

Thanks for our Moderators/admin and members supporting for this script.

#!/usr/bin/python
import threading
import sys
import os
import unidecode
import telnetlib
import time
import re
from time import sleep
start = time.time()
user = 'eciecidslam'
password = 'Hi-FOCuS'
start = time.time()
macfile = open('mumecimac.txt','w')
def open_telnet(host):
#with open('eci.txt','r') as ipfile:
#      for sr_no, line in enumerate(ipfile, start=1):
#        host = line.strip()
   timeout = 120
   sr_no = 0
   try:
        session = telnetlib.Telnet(host, 23, timeout)
        time.sleep(2)
        session.read_until(b"Login :")
        session.write((user+"\r").encode('ascii'))
        time.sleep(2)
        session.read_until(b"Password :",2)
        session.write((password + "\r").encode('ascii'))
        time.sleep(2)
        session.read_until(b"MCR64A >")
        session.write("dishash all".encode('ascii') + b"\r")
        output = session.read_until("MCR64A >".encode('ascii'), timeout )
        for line in output.decode('utf-8').split('\n')[4:]:
           line = line.split('|')
           if len(line) == 8:
              mac, bport, vlan = map(lambda x: x.strip(), line[:3])
              mac_address = mac2norm(mac)
              #MyList = host,mac_address, bport, vlan
              command = "bportr " +bport
              session.write((command +"\r").encode('ascii'))
              portoutput = session.read_until("MCR64A >".encode('ascii'), timeout )
              for line in portoutput.split('\n'):
                  if 'Port:' in line:
                      port = line.replace(' ','').split(':')[1]
                      #MyList += (port,)
                      macfile.write('{} {} {} {} {}\n'.format(host,mac_address, bport, vlan, port))
        session.write(("logout"+"\r").encode('ascii'))
        session.close()
   except Exception as excp:
            print('time out:- {}\n '.format(host))

def mac2norm(mac):
           mac = mac.split(' ')
           return '{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}'.format(*mac).upper()

def create_threads():
    threads = []
    with open('mumeci.txt','r') as ipfile:
        for sr_no, line in enumerate(ipfile, start=1):
            host = line.strip()
            time.sleep(2)
            th = threading.Thread(target = open_telnet ,args = (host,))
            time.sleep(5)
            th.start()
            threads.append(th)
        for thr in threads:
            thr.join()

if __name__ == "__main__":
        create_threads()
        print ("Exiting the program")
        #outfile.close()
        macfile.close()
        print('It took', time.time()-start, 'seconds.')