zoukankan      html  css  js  c++  java
  • python:实现简单的ssh

    socket_server_ssh.py

    #!usr/bin/env python
    # -*- coding:utf-8 -*-

    __author__ = "Samson"

    import socket
    import os

    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server.bind(("localhost",6969))
    server.listen()
    while True:
    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()
    if len(cmd_res) == 0:
    print("Command has no output")
    conn.send(str(len(cmd_res.encode())).encode("utf-8"))#连续两条send可能会出现粘包,建议send后立即recv一下
    conn.send(cmd_res.encode("utf-8"))
    server.close()

    socket_server_client.py

    #!usr/bin/env python
    # -*- coding:utf-8 -*-

    __author__ = "Samson"
    import socket
    client = socket.socket()
    client.connect(("localhost",6969))
    while True:
    cmd = input(">>:").strip()
    if len(cmd) == 0:
    continue
    client.send(cmd.encode("utf-8"))
    cmd_res_size = client.recv(1024)#接受命令结果的长度
    print("命令结果大小:",cmd_res_size)
    received_size = 0
    while received_size < int(cmd_res_size.decode()):
    data = client.recv(1024)
    received_size += len(data)#接收到的数据可能小于1024
    print(data.decode())
    else:
    print("cmd res receive done!")

    client.close()
  • 相关阅读:
    19.模块化
    20.ES7新特性
    22.ES9
    21.ES8新特性
    RabbitMQ:排他性队列(Exclusive Queue)
    为什么要使用消息队列
    收集RabbitMQ的用户
    身份管理提供商:Gigya和PingIdentity
    HTTP协议原理(详细)
    转:Linux下高并发socket最大连接数所受的各种限制
  • 原文地址:https://www.cnblogs.com/cansun/p/8325946.html
Copyright © 2011-2022 走看看