1

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()
slappyjam
  • 69
  • 2
  • 10
  • Please add the code by editing the original question and using the code formatting tools available there. – Jason LeBrun Apr 05 '12 at 21:26
  • What do you mean with "doesn't seem to return any data"? Where do you expect it to return something? It must have executed fine until the last line, otherwise read_until wouldn't have returned. – j13r Apr 05 '12 at 21:44

2 Answers2

2

Have you tried writing the ASCII character for CTRL+] to the telnet connection?

tn.write('\x1d')

vahid abdi
  • 9,636
  • 4
  • 29
  • 35
Jason LeBrun
  • 13,037
  • 3
  • 46
  • 42
  • would I follow it with `tn.write('quit\n')` ? – slappyjam Apr 05 '12 at 21:35
  • Is 'quit' a valid command for the telnet server that you're connected to? If you need to manually close the connection using Ctrl-], then writing '\x1d' (which is the ASCII value of Ctrl-]) should do the trick. – Jason LeBrun Apr 05 '12 at 21:37
  • If i use `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 issued – slappyjam Apr 05 '12 at 21:43
  • well `read_eager` and `read_lazy` don't hang but they don't print anything either – slappyjam Apr 05 '12 at 21:52
  • Well, that would indicate that there isn't anything to read then. You shouldn't sent the `\x1d` until you've received all of the data that you one, as I imagine it will immediately close the connection. – Jason LeBrun Apr 05 '12 at 21:53
  • 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 `print tn.read_until('NC_HOST>')` – slappyjam Apr 05 '12 at 22:11
  • If you've solved your original problem, you should post an answer of your own and accept it. – Jason LeBrun Apr 05 '12 at 22:13
0

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
slappyjam
  • 69
  • 2
  • 10