gpt4 book ai didi

Python 多个 telnet session

转载 作者:太空狗 更新时间:2023-10-30 03:03:36 26 4
gpt4 key购买 nike

我需要构建一个脚本来获取尽可能多的主机的 telnet 输出,并将它们保存到每个主机的单独文件中。该脚本应作为守护进程运行。

目前我有一个函数封装了使用 telnetlib 为单个主机执行此操作的逻辑,但我不知道如何进行。我计划为每个主机打开一个进程 (multiprocessing.Process),但我怀疑这将是一种资源浪费,它必须以更好的方式存在:)

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

最佳答案

我相信以下应该满足您的要求,我将您的原始代码制作成一种线程:

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()

希望这对您有所帮助,如果您有任何问题,请更新您的问题或发表评论。

关于Python 多个 telnet session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18377318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com