zoukankan      html  css  js  c++  java
  • 模拟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(('192.168.43.14', 8081))
    phone.listen(5)
    while True:
    conn, clent_add = phone.accept()
    while True:
    try:
    #1 接受命令
    data = conn.recv(1024)
    obj = subprocess.Popen(data.decode('utf-8'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout = obj.stdout.read()
    stderr = obj.stderr.read()
    #if not data:break #如果客户端挂掉,此方法适用于linux操作系统
    #print(data.decode('utf-8'))
    #2 执行命令 拿到结果
    #3 拔执行命令的结果发送给客户端
    conn.send(stdout+stderr) #+"这里可以继续优化
    except ConnectionResetError: #如果客户端挂掉,此方法适用于windows操作系统
    break
    conn.close()
    phone.close()





    客户端:

    import socket
    phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    phone.connect(('192.168.43.14', 8081))
    while True:
    msg = input('>>>').strip()
    if not msg: continue #一旦输入为空,虽然应用层可以收到,但是到应用层的操作系统就没有了,故无法发给服务端
    #发命令
    phone.send(msg.encode('utf-8'))
    #执行命令并发送结果
    data = phone.recv(1024) #这里的1024 有个巨大的坑
    print(data.decode('GBK'))
    phone.close()


    补充内容:

    import os
    res = os.system('dir')
    print(res)


    # import subprocess
    # obj = subprocess.Popen('dffif /', shell= True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
    # print('正确管道', obj.stdout.read().decode('GBK'))
    # print('错误管道', obj.stderr.read().decode('GBK'))
  • 相关阅读:
    第六章例6-5
    第六章例6-3
    第六章例6-2
    获取JVM默认编码以及获取其它JVM属性的方法(转)
    Java读取文本文件中文乱码问题
    highcharts highstock API js图形
    swing/swt可视化开发工具windowbuilder免费了
    swt 引入 js 问题
    swt 例子
    经验分享:开发SWT应用两点心得(转)
  • 原文地址:https://www.cnblogs.com/yuexijun/p/11408785.html
Copyright © 2011-2022 走看看