Передача полученных данных в функцию ввода в python - PullRequest
1 голос
/ 11 июня 2019

Хорошо, поэтому я создал сервер сокетов в python и хочу, чтобы кто-то подключался к нему, чтобы запустить приложение на сервере, но которое контролируется пользователем.Я попытаюсь объяснить лучше с помощью кода.

#!/usr/bin/python

import socket
import select
import os
from time import sleep

class SocketServer:
    """ Simple socket server that listens to one single client. """

    def __init__(self, host = '0.0.0.0', port = 2010):
        """ Initialize the server with a host and port to listen to. """
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.host = host
        self.port = port
        self.sock.bind((host, port))
        self.sock.listen(1)

    def close(self):
        """ Close the server socket. """
        print('Closing server socket (host {}, port {})'.format(self.host, self.port))
        if self.sock:
            self.sock.close()
            self.sock = None

    def run_server(self):
        """ Accept and handle an incoming connection. """
        print('Starting socket server (host {}, port {})'.format(self.host, self.port))

        client_sock, client_addr = self.sock.accept()

        print('Client {} connected'.format(client_addr))

        stop = False
        while not stop:
            if client_sock:
                # Check if the client is still connected and if data is available:

                os.system("python vuln.py")

                # try:
                #     rdy_read, rdy_write, sock_err = select.select([client_sock,], [], [])
                # except select.error:
                #     print('Select() failed on socket with {}'.format(client_addr))
                #     return 1

                if len(rdy_read) > 0:
                    read_data = client_sock.recv(255)
                    if len(read_data) == 0:
                        print('{} closed the socket.'.format(client_addr))
                        stop = True
                    else:
                        print('>>> Received: {}'.format(read_data.rstrip()))
                        if read_data.rstrip() == 'quit':
                            stop = True
                        else:
                            client_sock.send(read_data)
            else:
                print("No client is connected, SocketServer can't receive data")
                stop = True

        # Close socket
        print('Closing connection with {}'.format(client_addr))
        client_sock.close()
        return 0

def main():
    server = SocketServer()
    while (True):
        server.run_server()
    print 'Exiting'

if __name__ == "__main__":
    main()

Это мой сокет-сервер, который всегда работает и устанавливает несколько соединений.

print("Please tell me what's your age")

age = input('> ')

sleep(1)
print("Damn man, sometimes I wish I was %s" % age)
sleep(1)

, и это приложение, котороеЯ хочу запустить на сервере и позволить пользователю, который соединяется с netcat, например, увидеть ту же самую подсказку и иметь ту же функциональность, но на сервере.

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