zoukankan      html  css  js  c++  java
  • python ssh小程序

    client.py

    import socket
    import os
    import struct
    import json
    if os.name == 'nt':
        code = 'gbk'
    elif os.name == 'posix':
        code = 'utf-8'
    
    client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    client.connect(('127.0.0.1',8080))
    while 1:
        msg = input('content:').strip()
        if not msg:
            continue
        client.send(msg.encode(code))
        #获取header长度
        header_lenth = client.recv(4)
        print('*********',header_lenth)
        header_lenth = struct.unpack('i',header_lenth)[0]
        #获取header
        header = client.recv(header_lenth)
        # header = struct.unpack('i',header)[0]
        #信息长度
        data_lenth = json.loads(header.decode(code))['lenth']
        print(data_lenth)
        data_recv_lenth = 0
        data_recv = b''
        while data_recv_lenth < data_lenth:
            data = client.recv(1024)
            data_recv += data
            data_recv_lenth += len(data_recv)
        print(data_recv.decode(code),len(data_recv.decode(code)))
    client.close()

    server.py

    import socket
    import subprocess
    import os
    import struct
    import json
    if os.name == 'nt':
        code = 'gbk'
    elif os.name == 'posix':
        code = 'utf-8'
    #定义socket类型为 Ipv4  tcp
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #设定socket可重用ip
    server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    #绑定IP、端口
    server.bind(('127.0.0.1',8080))
    #监听连接数
    server.listen(5)
    while 1:
        #等待连接
        conn,client_addr = server.accept()
        print(client_addr)
        while 1:
            try:
                #接收到的信息
                data = conn.recv(1024)
                if not data:
                    continue
                print(data)
                #执行获取到的命令,注意命令需是非bytes类型,接收到的bytes类型数据需要解码
                obj = subprocess.Popen(data.decode(code),shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE)
                stderr = obj.stderr.read()
                stdout = obj.stdout.read()
                data = stderr+stdout
                #制作报头
                header_dict = {
                    'filename':'a.txt',
                    'md5':'aaaaaaaaaaaaaa',
                    'lenth':len(data)
                }
                header = json.dumps(header_dict).encode(code)
    
                # data_lenth = struct.pack('i',len(data))
                header_lenth = struct.pack('i',len(header))
                #发送header长度
                conn.send(header_lenth)
                #发送header
                conn.send(header)
                #返回信息
                conn.send(data)
            except ConnectionResetError:
                break
        conn.close()
    server.close()
  • 相关阅读:
    iOS 地图与定位开发系列教程(一)
    opencv 之 transformation
    the brain 8.0
    vs中添加库文件WinMM.Lib
    JAVA简单性能检测
    【转帖】一套鼠标控制2台电脑
    Synergy工具一套键盘鼠标连接多台机器
    文件夹下所有文件及子文件夹将文件名小写
    捕捉Facebook Like的数据
    按键精灵的网页自动化测试
  • 原文地址:https://www.cnblogs.com/thanos-ryan/p/13781856.html
Copyright © 2011-2022 走看看