telnetlib只回显本次命令的内容
时间: 2023-07-09 09:26:29 浏览: 43
telnetlib 是 Python 中用于实现 Telnet 客户端的标准库。在使用 telnetlib 发送命令时,默认是不会回显命令内容的。如果需要回显命令内容,可以在发送命令前先发送一个控制字符 b'\xff\xfd\x01',表示请求对方开启回显功能。具体实现可以参考下面的代码:
```python
import telnetlib
tn = telnetlib.Telnet('hostname', port)
tn.read_until(b'login: ')
tn.write(b'username\n')
tn.read_until(b'Password: ')
tn.write(b'password\n')
# 请求对方开启回显功能
tn.write(b'\xff\xfd\x01')
# 发送命令并获取输出
tn.write(b'ls\n')
print(tn.read_until(b'$').decode('utf-8'))
tn.close()
```
以上代码中,我们先连接到目标主机并发送用户名和密码登录,然后发送控制字符请求开启回显功能,最后发送 ls 命令并读取输出。注意,读取输出时需要使用 `read_until` 方法指定一个结束标志,否则会一直阻塞等待读取。在这个例子中,我们使用 `$` 作为结束标志。
相关问题
python telnetlib回显读取
### 回答1:
Python的telnetlib模块可以用于与远程主机进行交互,包括发送命令和读取回显。要读取回显,可以使用telnetlib的read_until()方法,该方法会等待直到读取到指定的字符串或超时。例如,以下代码可以连接到远程主机并读取回显:
```python
import telnetlib
HOST = "example.com"
user = "username"
password = "password"
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.read_until(b"$ ")
tn.write(b"ls\n")
print(tn.read_until(b"$ ").decode('ascii'))
```
在这个例子中,我们连接到主机example.com并发送用户名和密码。然后,我们等待提示符"$ ",并发送命令"ls"。最后,我们读取回显并将其打印出来。注意,我们使用了encode()方法将字符串转换为字节串,并使用decode()方法将字节串转换为字符串。
### 回答2:
Python中的telnetlib模块是实现Telnet协议的标准库之一,可以用于连接Telnet服务器执行命令,并实现读写操作。在使用telnetlib模块进行连接操作时,通常会遇到回显读取问题。
回显是指当我们在终端上输入命令后,服务器会将该命令发送回终端上进行显示,以便用户确认已输入的命令是否正确。在telnetlib模块中,回显数据是通过read_until()函数读取的。
在使用read_until()函数读取回显数据之前,需要先设置telnet服务器的回显模式。通过set_option_negotiation_callback()函数进行设置:
```
def set_echo_mode(tn):
def set_echo(option, remote):
if option == telnetlib.ECHO:
tn.sock.sendall(telnetlib.IAC + telnetlib.WONT + telnetlib.ECHO)
tn.set_option_negotiation_callback(set_echo)
```
上述代码中,set_echo_mode()函数会为telnet对象tn设置回显模式,通过set_option_negotiation_callback()函数将回显关闭。
在设置回显模式之后,可以使用read_until()函数读取回显数据。read_until()函数可以读取回显数据直到指定字符或字符串出现为止。
```
tn.write(b"ls\r\n")
output = tn.read_until(b"\n")
print(output.decode())
```
上述代码中,write()函数向服务器发送了ls命令,read_until()函数则会等待服务器回显出命令输出并返回回显数据。最后使用decode()函数将回显数据转换为字符串类型,并打印出来。
除了read_until()函数以外,还可以使用read_very_eager()读取所有可用的回显数据,或者使用read_some()读取指定数量的回显数据。
总体来说,在使用python的telnetlib模块进行回显读取时,需要先设置回显模式,然后使用read_until()、read_very_eager()或者read_some()等函数读取回显数据。这样,就可以轻松地实现Telnet客户端的回显读取功能。
### 回答3:
Python的telnetlib库提供了许多使用telnet命令和交互式应用程序进行通信的功能。其中一个常见的使用是从远程设备读取回显数据。
在使用telnetlib库时,使用Telnet类可以与远程设备(如路由器、交换机等)建立连接。我们可以利用read_until()方法读取来自远程设备的数据。
read_until()方法提供了一个字符串参数,该参数表示方法应该读取哪个字符串作为读取操作的结束标识符。如果在读取数据时遇到该字符串,则该函数将返回所有读取数据。如果读取操作超时,则函数将引发异常。以下是示例代码:
import telnetlib
tn = telnetlib.Telnet('192.168.1.1') # 先建立连接
tn.write(b'username\n')
tn.write(b'password\n')
tn.write(b'show version\n')
data = tn.read_until(b'Username:') # 读取“Username:”结束标识符之前的所有数据
# 显示读取到的数据
print(data.decode('utf-8'))
在示例代码中,首先使用Telnet类连接到远程设备。然后,将用户名、密码和show version命令写入设备。最后,使用read_until()方法读取所有来自远程设备的数据,直到读取到“Username:”字符串为止。使用decode('utf-8')方法将读取的数据从字节串转换为字符串,然后将其显示在控制台上。
此外,还可以在Telnet类的构造函数中设置超时。如果读取操作花费的时间超过此超时时间,则函数将引发异常,否则将返回所有读取数据。
总之,Python的telnetlib库可用于从远程设备中读取回显数据。使用read_until()方法读取数据时,请设置适当的结束标识符,并在需要时设置超时。
qt QProcess 回显linux 命令ls
可以通过以下代码使用QProcess在Linux中执行ls命令并将输出回显到控制台:
```cpp
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QProcess process;
process.start("ls");
process.waitForFinished();
QByteArray output = process.readAllStandardOutput();
qDebug() << output;
return a.exec();
}
```
这段代码首先创建了一个QProcess对象,并使用start()方法在Linux中执行ls命令。接着使用waitForFinished()方法等待命令执行完成。最后使用readAllStandardOutput()方法读取命令输出,并使用qDebug()将其输出到控制台。