Python套接字用作telnet连接,需要双读

时间:2014-04-11 18:56:40

标签: python sockets telnet

我使用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 bprint c)而不是只读取一次(print b)?

1 个答案:

答案 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")

您可以阅读telnetlib documentation for python 2.x here