Multiple telnet sessions in Python

I need to build a script to get the telnet output of as many hosts as possible and save them in a separate file for each host. The script should work like a daemon.

At the moment, I have a function that encapsulates the logic for this for a single host with telnetlib , but I will not continue. I planned to open a process ( multiprocessing.Process ) for each host, but I suspect that it will be a waste of resources, and it should exist better :)

 def TelnetLogSaver(hostname,ip,filename): # open files and telnet sessions f = open(filename,"a") tn = telnetlib.Telnet(ip,23,TIMEOUT) # login e = tn.read_until("Login: ") tn.write(USER+"\n") # and password e = tn.read_until("Password: ") tn.write(PASSWORD+"\n") # Connected. Start infinite loop to save messages log while True: e = tn.read_until(PROMPT,TIMEOUT) if e is not "": f.write(datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S")) f.write(e) f.flush() # avoid session timeout tn.write("\n") e = tn.read_until(PROMPT 
+4
source share
1 answer

I believe the following should do what is required, I took your source code and turned it into a stream type:

 import threading import telnetlib import datetime import sys # Global Variable Declarations TIMEOUT = 30 USER = "Noel" PROMPT = "Noel" class listener(threading.Thread): def __init__(self, filename, ip): # Have to make a call to the super classes' __init__ method super(listener, self).__init__() self.f = open(filename,"a") try: self.tn = telnetlib.Telnet(ip, 23, TIMEOUT) except: print "Bad Connection" sys.exit(0) def run(self): # login e = self.tn.read_until("Login: ") self.tn.write(USER+"\n") # and password e = self.tn.read_until("Password: ") self.tn.write(PASSWORD+"\n") while True: e = self.tn.read_until(PROMPT, TIMEOUT) if e is not "": self.f.write(datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S")) self.f.write(e.strip()) self.f.flush() # avoid session timeout self.tn.write("\n") if __name__ == "__main__": # Things to listen to is a dictionary of hosts and files to output # to, to add more things to listen to just add an extra entry into # the things_to_listen_to in the format: host : outputfile things_to_listen_to = {"localhost" :"localhost_output.txt"} # Thread holder is going to hold all the threads we are going to start thread_holder = [] for host, file in things_to_listen_to.iteritems(): thread_holder.append(listener(file, host)) for thread in thread_holder: thread.run() 

Hope this helps if you have any problems, please update your question or leave a comment.

+4
source

Source: https://habr.com/ru/post/1498350/


All Articles