Python socket作为telnet连接需双重读取
我正在通过telnet连接到设备。一旦连接上,我需要输入用户名admin
,然后按回车\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
)就可以了呢?
1 个回答
0
与其直接使用原始套接字,不如使用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")
你可以在这里查看Python 2.x 的 telnetlib 文档。