def test_facts(s): req = FactsRequestMessage() req.send_via(s) resp = Message.recv_via(s) assert(isinstance(resp, FactsResponseMessage)) assert(isinstance(resp.payload, dict)) assert('os.name' in resp.payload)
def test_ping(s): # test Ping/Pong Messages req = PingMessage() req.send_via(s) resp = Message.recv_via(s) assert(isinstance(resp, PongMessage)) assert(req.payload == resp.payload)
def run(self): with self._socket: try: while True: req = None try: req = Message.recv_via(self._socket) logger.info('Received message: ' + str(req)) req.process() if isinstance(req, Message): req.respond_via(self._socket) else: raise RuntimeError('Unknown message type: ' + str(req.type)) except (OSError, BrokenPipeError, ssl.SSLError) as e: # pass up raise except Exception as e: # catch everything else tb = ''.join(traceback.format_tb(sys.exc_info()[2])) logger.warning('Message ' + str(req) + ' execution produced exception: ' + str(e) + tb) resp = ExceptionMessage({'exception': e, 'traceback': tb}) resp.send_via(self._socket) except (ssl.SSLError) as e: logger.info('Unable to secure connection to ' + str(self._address) + ', closing...' + str(e)) self._socket.shutdown(socket.SHUT_RDWR) except (OSError, BrokenPipeError) as e: logger.info('Socket connection broken with ' + str(self._address) + ' due to ' + str(e)) else: logger.info('Connection to ' + str(self._address) + ' closing...') self._socket.shutdown(socket.SHUT_RDWR) logger.info('Connection to ' + str(self._address) + ' closed')
def test_ping(s): # test Ping/Pong Messages req = PingMessage() req.send_via(s) resp = Message.recv_via(s) assert (isinstance(resp, PongMessage)) assert (req.payload == resp.payload)
def test_returncode(s): req = RunProcessMessage({ 'args': 'exit 1', 'shell': True, }) req.send_via(s) resp = Message.recv_via(s) assert(resp.payload['returncode'] == 1)
def test_timeout(s): req = RunProcessMessage({ 'args': 'pause', 'shell': True, 'timeout': 1, }) req.send_via(s) resp = Message.recv_via(s) assert(isinstance(resp, ExceptionMessage))
def test_reg_query(s): req = RunProcessMessage({ 'args': 'REG QUERY HKLM\Software\Microsoft\Windows\CurrentVersion /v ProgramFilesDir', }) req.send_via(s) resp = Message.recv_via(s) assert(resp.payload['returncode'] == 0) assert(b'Program Files' in resp.payload['stdout']) assert(resp.payload['stderr'] == b'')
def test_response(s): req = RunProcessMessage({ 'args': 'exit', 'shell': True, }) req.send_via(s) resp = Message.recv_via(s) assert(isinstance(resp, CompletedProcessMessage)) assert(isinstance(resp.payload, dict)) assert('args' in resp.payload) assert('returncode' in resp.payload) assert('stdout' in resp.payload) assert('stderr' in resp.payload)
def test_valid(): try: with ctx.wrap_socket( socket.socket(socket.AF_INET, socket.SOCK_STREAM), server_hostname=socket.gethostbyaddr(HOST)[0] ) as s: s.connect((HOST, PORT)) print(str(s.getpeercert())) req = PingMessage() req.send_via(s) resp = Message.recv_via(s) assert(isinstance(resp, PongMessage)) assert(req.payload == resp.payload) s.shutdown(socket.SHUT_RDWR) except ssl.CertificateError: assert(False)
def run(self): with self._socket: try: while True: req = None try: req = Message.recv_via(self._socket) logger.info('Received message: ' + str(req)) req.process() if isinstance(req, Message): req.respond_via(self._socket) else: raise RuntimeError('Unknown message type: ' + str(req.type)) except (OSError, BrokenPipeError, ssl.SSLError) as e: # pass up raise except Exception as e: # catch everything else tb = ''.join(traceback.format_tb(sys.exc_info()[2])) logger.warning('Message ' + str(req) + ' execution produced exception: ' + str(e) + tb) resp = ExceptionMessage({ 'exception': e, 'traceback': tb }) resp.send_via(self._socket) except (ssl.SSLError) as e: logger.info('Unable to secure connection to ' + str(self._address) + ', closing...' + str(e)) self._socket.shutdown(socket.SHUT_RDWR) except (OSError, BrokenPipeError) as e: logger.info('Socket connection broken with ' + str(self._address) + ' due to ' + str(e)) else: logger.info('Connection to ' + str(self._address) + ' closing...') self._socket.shutdown(socket.SHUT_RDWR) logger.info('Connection to ' + str(self._address) + ' closed')