Socket模拟SSH

Socket模拟SSH

主要思路

客户端发送相关命令到服务端,服务端执行命令(通过subprocess模块实现)然后将结果返回给客户端

小知识

Linux中可以发送空数据,服务端能接受到空数据

windows发送空数据,服务端是接收不到的

服务端

from socket import *
import subprocess

server=socket(AF_INET,SOCK_STREAM)

server.bind(('127.0.0.1',9000))
server.listen(5)

print("服务器启动成功")

while True:
    print("服务器等待连接...")
    conn,addr=server.accept()
    print(f"{addr}连接成功")
    while True:
        cmd=conn.recv(1024)
        print("收到指令",cmd)
        # 把cmd解码成字符串
        zx=cmd.decode('utf8')

        if zx=="q":
            break

        #shell启动,运行命令
        #把正确信息放入管道
        #把错误信息放入管道
        result=subprocess.Popen(zx,shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE)
        #取出管道中的正确和错误运行结果
        t_result=result.stdout.read()
        f_result=result.stderr.read()

        conn.send(t_result)
        conn.send(f_result)

        print("返回结果成功")
    conn.close()

客户端

from socket import *

client=socket()

client.connect(('127.0.0.1',9000))
while True:
    cmd=input("请输入要执行的命令:")

    client.send(cmd.encode("utf8"))

    data=client.recv(1024)

    #打印执行结果
    print(data.decode('GBK'))
原文地址:https://www.cnblogs.com/zx125/p/11480627.html