网络编程(五)——模拟ssh远程执行命令

书读的越多而不加思考,你就会觉得你知道得很多;而当你读书而思考得越多的时候,你就会越清楚地看到,你知道得很少。

导读:本篇文章讲解 网络编程(五)——模拟ssh远程执行命令,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

什么是ssh?

SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。

远程执行命令后如何拿到执行结果?

可以使用subprocess模块,subprocess模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。

需求:我想用python语句查看我Windows系统的本地网卡ip信息(ipconfig命令)。

import subprocess
obj = subprocess.Popen("ipconfig",shell=True,
                 stdout=subprocess.PIPE, # 正确结果丢到这个“管道”中
                 stderr=subprocess.PIPE) # 错误结果丢入这个“管道”
print(obj)
# linux操作系统默认用utf-8编码
# windows操作系统默认用gbk编码
print("stdout 1——>",obj.stdout.read().decode("gbk"))
print("stderr 1——>",obj.stderr.read().decode("gbk"))

控制台已成功打印本地网卡ip信息。 

网络编程(五)——模拟ssh远程执行命令

 代码演示

服务端代码

import socket
import subprocess

phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.bind(("127.0.0.1",8080))
phone.listen(5)
print("starting...")
while True:
    conn,client_addr = phone.accept()
    print(client_addr)
    while True:
        # 1、收命令
        cmd = conn.recv(1024)
        if not cmd:break
        # 2、执行命令,拿到结果 ——> 返回的就是我windows系统上面执行命令收到的结果
        obj = subprocess.Popen(cmd.decode("utf-8"), shell=True,
                               stdout=subprocess.PIPE,  # 正确结果丢到这个“管道”中
                               stderr=subprocess.PIPE)  # 错误结果丢入这个“管道”
        stdout = obj.stdout.read()
        stdeer = obj.stderr.read()

        # 3、把命令的结果返回给客户端
        # + 涉及效率问题,它会申请一个新的内存空间
        # + 是一个可以优化的地方,后面会学到
        conn.send(stdout+stdeer)

    conn.close()
phone.close()

客户端代码

import socket

phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(("127.0.0.1",8080))

while True:
    # 1、发命令
    cmd = input(">>:").strip()
    if not cmd:continue
    phone.send(cmd.encode("utf-8"))

    # 2、拿到命令的结果,并打印
    # 服务端回应的数据大小有可能超过1024字节
    # 1024的坑后面来填
    data=phone.recv(1024)
    print(data.decode("gbk"))

phone.close()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/122902.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!