Python socket作为telnet连接需双重读取

0 投票
1 回答
8727 浏览
提问于 2025-04-18 02:24

我正在通过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 bprint 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 文档

撰写回答