我一直在疯狂尝试做这项工作。我想从python收集一个telnet日志。在普通的telnet上,我只需打开telnet并使用:
set logfile test.xml
问题是使用python我无法弄清楚如何首先传递此命令。当我运行这个
try:
tn = telnetlib.Telnet()
tn.write(b"set logfile test.xml" + b"\r")
tn.open(IP, 223, 8192)
except socket.timeout:
print ("socket timeout")
sulk()
我收到此错误:
Traceback (most recent call last):
File "C:xxxxxxxx.py", line 18, in <module>
tn.write(b"set logfile test.xml" + b"\r")
File "C:\Python33\lib\telnetlib.py", line 282, in write
self.sock.sendall(buffer)
AttributeError: 'NoneType' object has no attribute 'sendall'
如果我在不设置日志文件的情况下打开IP /端口,脚本运行正常。并解决了我使用python写入文件的问题。但由于某种原因,这需要很长时间5分钟。如果我只是通过telnet运行命令,则需要10秒钟......
telnet
set logfile test.xml
o xxx.xxx.xxx.xxx xxx
>>commandx
>>commandy
All the data I need is here and in the log file
在打开IP /端口之前,我可以做些什么来设置日志文件? 在此先感谢!
答案 0 :(得分:3)
你正在向后看这个。我假设您正在尝试将其记录到文件中,以便您可以将其读入Python脚本并使用它执行某些操作。您应该做的是从变量中捕获telnet会话的输出。然后你可以进一步处理它,甚至可以把它写到文件中,等等。
import telnetlib
host = "host.example.com"
port = 223
timeout = 9999
try:
session = telnetlib.Telnet(host, port, timeout)
except socket.timeout:
print ("socket timeout")
else:
session.write("command1\n")
session.write("command2\n")
output = session.read_all()
# output now contains the text you want
# so now you can do something with it:
with open("test.xml", "w") as logfile:
logfile.write(output)
如果输出可能很大,您可以以块的形式阅读:
import time, telnetlib
host = "host.example.com"
port = 223
timeout = 9999
try:
session = telnetlib.Telnet(host, port, timeout)
except socket.timeout:
print ("socket timeout")
else:
session.write("command1\n")
session.write("command2\n")
with open("test.xml", "w") as logfile:
output = session.read_some()
while output:
logfile.write(output)
time.sleep(0.1) # let the buffer fill up a bit
output = session.read_some()
答案 1 :(得分:2)
无。
set logfile
不是telnet协议的一部分,它是您最喜欢的telnet客户端的命令。现在你正在使用 telnet客户端的另一个实现,它没有这样的命令(没有理由尝试将它发送到远程系统)。
据我所知,python的telnetlib
中没有内置的日志工具来推荐替代。