I am trying to use python's telnetlib module to get information from a remote device. Unfortunately, it looks like the remote device does not have a "logout" type of command. So you have to manually close the connection with CTRL-] (when manually telnetting). I tried using Telnet.close() but doesn't seem to return any data.
Suggestions?
HOST = "172.16.7.37"
user = "Netcrypt"
password = "Netcrypt"
tn = telnetlib.Telnet(HOST)
tn.read_until("User: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("session \n")
print tn.read_until("NC_HOST> ")
tn.close()
Have you tried writing the ASCII character for CTRL+] to the telnet connection?
tn.write('\x1d')
tn.write('\x1d')
it does terminate the connection. But if I add print tn.read_all()
after it, it just hangs. I dont see how i can get the information back from the 'session' command i issue - slappyjam 2012-04-05 21:43
read_eager
and read_lazy
don't hang but they don't print anything eithe - slappyjam 2012-04-05 21:52
\x1d
until you've received all of the data that you one, as I imagine it will immediately close the connection - Jason LeBrun 2012-04-05 21:53
`print tn.read_until('NC_HOST>')`
< - slappyjam 2012-04-05 22:11
I ended up not needing any of that. The deal was I had to read to the prompt, issue my command, read until the next prompt. Never needed to read_all().
Here's the working code:
import telnetlib
HOST = "172.16.7.37"
user = "Netcrypt"
password = "Netcrypt"
tn = telnetlib.Telnet(HOST)
tn.read_until("User: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.read_until('NC_HOST>')
tn.write("session\n")
data = tn.read_until('NC_HOST>')
print data