标签: telnetlib

Python telnetlib3 示例

我想了解如何在简单的场景中使用 telnetlib3。

长期存在的 telnetlib(不是 3)在https://docs.python.org/3/library/telnetlib.html有一个简单的示例,其中 python 程序连接到 telnet 服务器,然后查找提示并提供响应。人们可以很容易地看到如何将此示例扩展到不同的提示、添加超时以及添加更多提示响应步骤。

import getpass
import telnetlib

HOST = "localhost"
user = input("Enter your remote account: ")
password = getpass.getpass()

tn = telnetlib.Telnet(HOST)

tn.read_until(b"login: ")
tn.write(user.encode('ascii') + b"\n")
if password:
    tn.read_until(b"Password: ")
    tn.write(password.encode('ascii') + b"\n")

tn.write(b"ls\n")
tn.write(b"exit\n")

print(tn.read_all().decode('ascii'))
Run Code Online (Sandbox Code Playgroud)

但是,telnetlib(不是 3)已被弃用。

替代品 telnetlib3 ( https://telnetlib3.readthedocs.io/en/latest/intro.html#quick-example ) 提供了一个基于 asyncio 的示例,并且异步“shell”函数(与服务器交互)阻塞等待提示(异步的基本原理)并始终用“y”响应服务器。

import asyncio, telnetlib3

async def shell(reader, writer):
    while True:
        # read stream until '?' mark is found
        outp = await reader.read(1024)
        if not outp: …
Run Code Online (Sandbox Code Playgroud)

python telnetlib python-asyncio telnetlib3

4
推荐指数
1
解决办法
6336
查看次数

Python telnetlib:令人惊讶的问题

我正在使用Python模块telnetlib来创建一个telnet会话(使用国际象棋服务器),我遇到了一个问题,我真的无法包围我的大脑.以下代码完美运行:

>>> f = login("my_server") #code for login(host) below.
>>> f.read_very_eager()
Run Code Online (Sandbox Code Playgroud)

这会吐出服务器通常在登录时打印的所有内容.但是,当我把它放在一个函数中,然后调用它:

>>> def foo():
...   f = login("my_server")
...   return f.read_very_eager()
...
>>> foo()
Run Code Online (Sandbox Code Playgroud)

我什么都没得到(空字符串).我可以检查登录是否正确执行,但由于某种原因我看不到文本.它吞噬了哪里?

非常感谢.

为了完整性,这里是登录(主机):

def login(host, handle="guest", password=""):
try:
    f = telnetlib.Telnet(host) #connect to host
except:
    raise Error("Could not connect to host")
f.read_until("login: ")
try:
    f.write(handle + "\n\r")
except:
    raise Error("Could not write username to host")
if handle == "guest":
    f.read_until(":\n\r")
else:
    f.read_until("password: ")
try:
    f.write(password + "\n\r")
except:
    raise Error("Could not write password to host") …
Run Code Online (Sandbox Code Playgroud)

python telnet telnetlib

3
推荐指数
1
解决办法
6593
查看次数

Python Telnetlib read_until'#'或'>',多个字符串确定?

if (tn.read_until('>')):
    action1
else:
    action2
Run Code Online (Sandbox Code Playgroud)

要么

if (tn.read_until() == '>'):
    action1
else:
    action2
Run Code Online (Sandbox Code Playgroud)

我只想read_until()检查哪个String首先出现,然后执行不同的操作.或者有没有相同的方法?

python port automated-tests telnet telnetlib

3
推荐指数
1
解决办法
1万
查看次数

如何从Python的telnet响应中读取一行?

我很惊讶我在这里找不到这个问题.

我想从telnet响应中提取一行并使其成为变量.(实际上是该行的一个数字).我可以使用telnet.read_until()提取到我需要的位置,但整个开始仍然存在.打印输出显示机器的不同状态.

我想要获取的行格式如下:

CPU Utilization          : 5 %
Run Code Online (Sandbox Code Playgroud)

我真的只需要数字,但输出的其余部分有很多':'和'%'字符.任何人都可以帮我提取这个价值吗?提前致谢!

这是我的代码(这将读取整个输出并打印):

import telnetlib, time


print ("Starting Client...")
host    = input("Enter IP Address: ")
timeout = 120

print ("Connecting...")
try:
    session = telnetlib.Telnet(host, 23, timeout)
except socket.timeout:
    print ("socket timeout")
else:
    print("Sending Commands...")
    session.write("command".encode('ascii') + b"\r")
    print("Reading...")
    output = session.read_until(b"/r/n/r/n#>", timeout )
    session.close()
    print(output)
    print("Done")
Run Code Online (Sandbox Code Playgroud)

编辑:输出可能是的一些示例:

Boot Version         : 1.1.3 (release_82001975_C)
Post Version         : 1.1.3 (release_82001753_E)
Product VPD Version  : release_82001754_C
Product ID           : 0x0076
Hardware Strapping   : 0x004C
CPU Utilization      : …
Run Code Online (Sandbox Code Playgroud)

python telnet telnetlib python-3.x python-3.3

2
推荐指数
1
解决办法
2万
查看次数

如何在python中发送telnetlib control + c命令

我试图使用telnetlib库在python中发送control + c命令.目前我在做

tn.write('^]')
Run Code Online (Sandbox Code Playgroud)

但上面的代码似乎不起作用.关于我应该使用什么的任何线索?

python telnet telnetlib

2
推荐指数
2
解决办法
6687
查看次数

Python - 路由器上的telnet和列表完整结果(点击空格键)

import telnetlib

def telNetCall():
    host  = "10.200.1.23"
    user  = "me"
    password = "matrix"
    telnet  = telnetlib.Telnet(host) 
    telnet.read_until('Username: ', 3) 
    telnet.write(user + '\r')
    telnet.read_until('Password: ', 3)  
    telnet.write(password + '\r') 
    telnet.write("sh log"+ "\r\n")
    telnet.write('exit' + '\r')
    print telnet.read_all() 
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我尝试从cisco路由器中获取"show log"时,它只给出了部分结果,我认为这是因为你需要按空格键5次(取决于日志历史记录的多长时间)来获取完整的日志 - 当我这样做manualy,我不知道如何告诉python列出完整的日志.有什么建议吗?

python router telnetlib

1
推荐指数
1
解决办法
6343
查看次数