Управляйте интерактивом. соединение netcat с Python (подпроцесс или аналогичный) - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь управлять сеансом netcat, используя Python, соединение будет примерно таким:

listening on [any] 1234 ...
connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 37878                        
id #### ----> user input
uid=0(root) gid=0(root) groups=0(root) #### ----> output
pwd #### ----> user input
/root #### ----> output
exit #### ----> user input

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

Я пытался использовать подпроцесс, но не смог заставить его работать, мой код был что-то вроде:

#!/usr/bin/python
import subprocess

def listener():
    command = ''
    proc = subprocess.Popen(['nc', '-lvn','1234'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    while (command != 'exit'):
        command = bytes(input(),'utf-8')
        proc.stdin.write(command)
        print(proc.stdout.readline().decode())

listener()

, и я не могу получить какой-либо правильный вывод от другого машина, единственный вывод, который я получаю:

sh: no job control in this shell

Я не против использовать любую другую библиотеку, кроме подпроцесса, если это помогает.

1 Ответ

0 голосов
/ 28 февраля 2020

Не изобретайте велосипед, используйте nclib :

from nclib import TCPServer
server = TCPServer(('0.0.0.0', 1234))
for client in server:
    print(client.recv()) # print to shell
    client.send(client.recv()) # echo to client

Тест:

nc 127.0.0.1 1234

Установка:

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