2016-06-16 7 views
1

Мне интересно, можно ли узнать, успешно ли установлено соединение с telnet?Python telnet connection

Так что, если я подключен к моему коммутатору и если бы я мог писать команды

telnet = telnetlib.Telnet(IP) 
telnet.read_until(b"User Name:") 
telnet.write(b"LOGIN\n") 
telnet.read_until(b"Password:") 
telnet.write(b"PASSWORD\n") 
# Here I want to know if I'm connected 
+0

Там нет такой опции в 'telnet' Lib, вы можете разобрать ответ сервера и проверить, если соединение успешно или нет, то есть, если сервер отвечает на успешной аутентификации – Harwee

+0

На самом деле, я думаю, что некоторые из методов будет возвратите 'EOFError', если соединение потеряно. Поэтому, вероятно, вы должны заключить свой код в предложение 'Try/Except'. См. Здесь: https://docs.python.org/3.5/library/telnetlib.html –

+0

@Harwee Я использовал ваш совет, и он отлично работает! – Eduloc

ответ

0

Не используйте read_all, если вы планируете что-то написать после аутентификации. Он блокирует соединение до тех пор, пока не будет достигнуто значение EOF/соединение закрыто.

Сначала проверьте, что выходной сервер telnet дает успешную аутентификацию с использованием шпатлевки или чего-то еще. read_untill строка, подлежащая согласованию после аутентификации.

telnet = telnetlib.Telnet(IP) 
telnet.read_until(b"User Name:") 
telnet.write(b"LOGIN\n") 
telnet.read_until(b"Password:") 
telnet.write(b"PASSWORD\n") 

telnet.read_untill("string to be matched") 
+0

Я использовал 'telnet.read_very_eager()' – Eduloc

+0

@Harwee да, вы правы, это лучше использовать telnet.read_until() или telnet.read_very_eager() – wind85

+0

Спасибо вам обоим! :) – Eduloc

1

Вы могли бы пойти так:

def is_connected(telnet_obj): 
    answer = telnet_obj.read_all() 
    if "connected" in answer:    #this test condition is not real is an example 
     return True 
    else: 
     return False 

Если вы заметили, что Yout маршрутизатор/коммутатор возвращает вас может проверить это условие. В этом случае тестирование на наличие строки или отсутствие переменной ответа.