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'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值