我使用telnet连接到设备。连接后,我需要输入用户名admin
,按Enter \n
并使用空白密码(再次输入\n
)。在描述登录过程之后,我应该结束邀请(prompt) #
。我在每次写入后都从套接字读取。该计划如下:
import socket
s = socket.socket()
#Connecting using telnet
s.connect(('192.168.1.2',23))
a = s.recv(1000)
print 'a:', a
s.send('admin\n\n')
b = s.recv(1000)
print 'b:', b
c = s.recv(1000)
print 'c:', c
该计划的输出如下:
a: ��
b: �������� ��!��"��'����#��User:
c: admin
Password:
(prompt) #
问题:
为什么我需要进行双读以接收所有信息(print b
和print c
)而不是只读取一次(print b
)?
答案 0 :(得分:1)
您可以使用telnetlib。
,而不是使用原始套接字典型用法:
import getpass
import sys
import telnetlib
HOST = "localhost"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("ls\n")
tn.write("exit\n")
print tn.read_all()
这将询问您的用户名和密码,然后使用输入的信息对服务器进行身份验证,如下所示:
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")