• 模拟ssh功能和subprocess模块


    模拟ssh功能和subprocess模块

    ssh---》远程执行命令

    subprocess---》执行系统命令的模块

    一、subprocess模块

    import subprocess
    # 执行系统dir命令(查看当前目录下有哪些文件),把执行的正确结果放到管道中
    obj = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    # stdout是正确信息,stderr是错误信息
    # 拿到结果的管道,读出里面的内容
    ss = obj.stdout.read()  # 读正确信息
    err = obj.stderr.read()  # 读错误信息
    print('错误信息>>>',str(err,encoding='gbk'))  # 打印错误信息,因为windows用的gbk编码,所以用gbk解码
    print('正确信息>>>',str(ss,encoding='gbk'))  # 打印正确信息
    

    二、模拟ssh功能的客户端和服务端

    2.1 模拟ssh功能的客户端

    import socket
    soc = socket.socket() # 不传参默认是tcp协议
    soc.connect(('127.0.0.1',8005))
    while True:  # 通信循环
        in_s = input('请输入要执行的命令>>>').strip()
        soc.send(in_s.encode('utf8'))  # 转换成bytes格式发送
        data = soc.recv(1024)  # 接收数据
        print(str(data,encoding='gbk')) # 打印接收的数据
    

    请输入要执行的命令>>>dir
    驱动器 E 中的卷是 软件下载安装
    卷的序列号是 E6E3-32EF

    E:老男孩教育python项目Pycharm练习网络编程906 模拟ssh(远程执行命令)功能和subprocess模块 的目录

    2019/09/10 21:04

    .
    2019/09/10 21:04 ..
    2019/09/10 20:30 363 client_ssh.py
    2019/09/10 21:04 912 server_ssh.py
    2019/09/10 19:56 666 subprocess --执行系统命令模块.py
    3 个文件 1,941 字节
    2 个目录 101,702,057,984 可用字节

    2.2 模拟ssh功能的服务端

    import socket
    import subprocess
    soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    soc.bind(('192.168.11.176',8005))
    soc.listen(5)
    while True:  # 连接循环
        print('等待客户端连接')
        conn,addr = soc.accept()
        print('有个客户端连接上了>>>',addr)
        while True:  # 通信循环
            try:
                data = conn.recv(1024)
                if len(data) == 0:
                    break
                print(data)
                # 使用subprocess模块
                obj = subprocess.Popen(str(data,encoding='utf8'),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
                # 执行正确的结果bytes格式,gbk编码(windows平台)
                msg = obj.stdout.read()
                # 把执行的结果通过网络传给c端
                conn.send(msg)
            except Exception:
                break
        # 关闭通路
        conn.close()
    
    # 关闭连接
    soc.close()
    
    

    等待客户端连接
    有个客户端连接上了>>> ('127.0.0.1', 50889)
    b'dir'

  • 相关阅读:
    nginx 平滑升级和location配置案例
    nginx
    基于zabbix的监控keepalive脑裂
    KVM部署
    基于keepalived的lvs负载均衡http集群
    高可用keepalived
    KVM
    无向图中 生成树,完全图,连通图 的区别
    java中 is
    第一章——软件工程学概述 思维导图
  • 原文地址:https://www.cnblogs.com/zhuangyl23/p/11503359.html
Copyright © 2020-2023  润新知