Как использовать команды при подключении компьютеров через сокет? - PullRequest
1 голос
/ 08 ноября 2019

Я настроил скрипт python для соединения двух компьютеров с сокетами и пытаюсь запускать команды из терминала. Надеемся, что скрипт выполнит команды на хосте на клиенте, но не распознает никаких команд. Мой код для сервера

import socket

HOST = '0.0.0.0'
PORT = 12345

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((HOST, PORT))

server_socket.listen(5)
print("\n[*] Listening on port " +str(PORT)+ ", waiting for connexions.")


client_socket, (client_ip, client_port) = server_socket.accept()
print("[*] Client " +client_ip+ " connected.\n")


while True:
    try:
        command = input(client_ip+ ">")
        if(len(command.split()) != 0):
            client_socket.send(bytes(command, 'utf-8'))
        else:
            continue
    except(EOFError):
            print("Invalid input, type 'help' to get a list of implemented commands.\n")
            continue

    if(command == "quit"):
        break

    data = client_socket.recv(1024)
    print((data + b"\n"))

client_socket.close()

, а клиент -

import socket
import subprocess, os

HOST = ''
PORT = 12345

connexion_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connexion_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
connexion_socket.connect((HOST, PORT))
print('\n[*] Connected to " +HOST+ " "on port" +str(PORT+) ".\n"')

while True:

    command = str(connexion_socket.recv(1024))
    split_command = command.split()
    print('Received command : ' +command)

    if command == 'quit':
        break

    if(command.split()[0] == 'cd'):
        if len(command.split()) == 1:
            connexion_socket.send((os.getcwd()))
        elif len(command.split()) == 2:
            try:
                os.chdir(command.split()[1])
                connexion_socket.send(('Changed Directory to' + os.getcwd()))
            except:
                connexion_socket.send(str.encode('No such directory : ' +os.getcwd()))

    else:

        proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

        stdout_value = proc.stdout.read() + proc.stderr.read()
        print(str(stdout_value) + '\n')

        if(stdout_value != ''):
            connexion_socket.send(stdout_value)
        else:
            connexion_socket.send(command+ ' does not return anything')

Всякий раз, когда я пытаюсь выполнить команду типа 'ipconfig' или 'cd', я получаю сообщение об ошибке

"не распознается как внутренняя или внешняя команда, \ r \ noperable программа или командный файл. \ R \ n \ n"

Любая помощь приветствуется, спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...