• Python学习之路:socket实现ssh


    服务端

    ##sock_server_ssh
    
    import socket,os
    server = socket.socket()
    server.bind(('localhost',9999))
    
    server.listen()
    while True:
        print("接收新指令")
        conn,addr = server.accept()
        print("new conn:",addr)
        while True:
            data = conn.recv(1024)
            if not data:
                print("客户端已断开")
                break
            print("执行指令:",data)
            cmd_res = os.popen(data.decode()).read()#接受字符串,执行结果也是字符串
            print("before send",len(cmd_res))
            if len(cmd_res) == 0:
                cmd_res = "cmd has no output..."
    
    
            conn.send(str(len(cmd_res)).encode("utf-8"))#先发大小给客户端
            conn.send(cmd_res.encode("utf-8"))
            print("send done")
    
    
    server.close()
    View Code

    客户端

     1 ##socket_server_client
     2 
     3 import socket
     4 client = socket.socket()
     5 client.connect(("localhost",9999))
     6 
     7 while True:
     8     cmd = input(">>:").strip()
     9     if len(cmd) ==0:continue
    10     client.send(cmd.encode('UTF-8'))
    11     cmd_res_size = client.recv(1024)#接收命令结果的长度
    12     print("命令结果大小:",cmd_res_size)
    13     received_size = 0
    14     #received_data = b''
    15     while received_size < int(cmd_res_size.decode()) :
    16 
    17         data = client.recv(1024)
    18         received_size += len(data)#每次收到的有可能小于1024,所以必须用len判断
    19         #print(data.decode())
    20         print(received_size)
    21     else:
    22         print("cmd res receive done...",received_size)
    23 
    24     #cmd_res = client.recv(1024)
    25 
    26     #print(cmd_res)
    27 
    28 client.close()
    View Code
  • 相关阅读:
    深入理解Linux修改hostname
    Linux开发环境必备十大开发工具
    管理员必备的几个Linux系统监控工具
    Solaris&&QNX® Neutrino®&&OpenVMS&&FreeBSD&&AIX
    ansible来了
    Cobbler系统安装备用链接
    Web安全
    在Eclipse/STS中使用EclEmma进行覆盖率检查
    C#中使用扩展方法
    Winform中Textbox的使用
  • 原文地址:https://www.cnblogs.com/xiaobai005/p/8484323.html
Copyright © 2020-2023  润新知