Example #1
0
def kill_all_processes(processes_to_kill):
    for p in processes_to_kill:
        try:
            if p.poll() is None:
                logger.debug('killing process %s' % p.pid)
                osinteraction.getInstance().kill_pid(p.pid)
            p.wait()
        except Exception as e:
            logger.exception(e)
Example #2
0
 def setUp(self):
     print self._testMethodName
     self.os_interaction = getInstance()
     set_log_level(logging.DEBUG)
     self.app = OpenportApp()
     self.os_interaction = osinteraction.getInstance()
     self.test_db = os.path.join(os.path.dirname(__file__), 'testfiles',
                                 'tmp', 'db_test.db')
     try:
         os.remove(self.test_db)
     except:
         pass
     self.stop_port_forward = False
Example #3
0
def get_default_key_locations():
    app_data_path = osinteraction.getInstance().get_app_data_path()
    log.debug('app_data_path: %s' % app_data_path)
    private_key_file = os.path.join(app_data_path, 'id_rsa')
    public_key_file = os.path.join(app_data_path, 'id_rsa.pub')

    return public_key_file, private_key_file
Example #4
0
        def run(self, timeout):
            def target():
                #print 'Thread started'
                command = self.cmd
                if osinteraction.is_windows():
                    command = ' '.join(['"%s"' % arg for arg in self.cmd])

                self.process = subprocess.Popen(
                    command,
                    stderr=subprocess.PIPE,
                    stdout=subprocess.PIPE,
                    shell=osinteraction.is_windows(),
                    close_fds=not osinteraction.is_windows())
                self.process.wait()
                #self.process.communicate()
                #print 'Thread finished'

            thread = threading.Thread(target=target)
            thread.start()

            thread.join(timeout)
            if thread.is_alive():
                print 'Terminating process'
                self.process.terminate()
                thread.join()
            print self.process.returncode
            return osinteraction.getInstance().get_output(self.process)
Example #5
0
 def get_and_save_random_manager_port(self):
     config = ConfigFileHandler(self.config.config)
     manager_port = osinteraction.getInstance().get_open_port()
    # manager_port = 22
     self.config.manager_port = manager_port
     config.set('manager', 'port', str(manager_port))
     self.config.manager_port_from_config_file = True
     return manager_port
Example #6
0
 def set_manager_port(self, command):
     os_interaction = osinteraction.getInstance()
     if self.config.manager_port_from_config_file:
         command = os_interaction.unset_variable(command, '--listener-port')
     elif self.config.manager_port > 0:
         command = os_interaction.set_variable(command, '--listener-port',
                                               self.config.manager_port)
     return command
Example #7
0
    def start_openport_process_from_session(self, session, database=''):
        command = self.get_restart_command(session, database=database)
        logger.debug(command)
        session.restart_command = command

        os_interaction = osinteraction.getInstance()
        full_command = os_interaction.get_full_restart_command(session)
        p = os_interaction.start_process(full_command)
        return p
Example #8
0
    def __init__(self):
        self.account_id = -1
        self.key_id = -1
        self.openport_address = DEFAULT_SERVER
        self.manager_port = -1
        self.manager_port_from_config_file = False
        self.config = osinteraction.getInstance().get_app_data_path(
            'openport.cfg')
        self.contact_manager = True
        self.verbose = False
        self.tcp_listeners = set()

        self.app = None
Example #9
0
    def setUp(self):
        print self._testMethodName
        set_log_level(logging.DEBUG)

        self.server = "https://test2.openport.io"
        #self.server = "http://localhost:8000"
        if os.path.exists('/usr/bin/phantomjs'):
            self.browser = webdriver.PhantomJS('/usr/bin/phantomjs')
        else:
            self.browser = webdriver.PhantomJS('/usr/local/bin/phantomjs')

        self.browser.set_window_size(1124, 850)
        #self.browser = webdriver.Firefox()
        #self.browser = webdriver.Chrome('/usr/local/bin/chromedriver')
        self.processes_to_kill = []
        self.os_interaction = osinteraction.getInstance()
Example #10
0
    def __init__(self, db_location=None, init_db=True, echo_queries=False):
        self.osinteraction = osinteraction.getInstance()

        if not db_location:
            db_location = self.osinteraction.get_app_data_path('openport.db')

        db_exists = os.path.exists(db_location)
        logger.debug('db location: %s' % db_location)
        self.engine = create_engine('sqlite:///%s' % db_location,
                                    echo=echo_queries)
        self.db_location = db_location
        self.session_factory = sessionmaker(bind=self.engine)
        logger.debug('db location: %s' % db_location)
        self.Session = scoped_session(self.session_factory)

        if init_db:
            self.init_db(db_exists)
Example #11
0
    def __init__(self, parent):
        super(OpenPortItTaskBarIcon, self).__init__()
        self.frame = parent
        self.parentApp = parent
        self.os_interaction = osinteraction.getInstance()
        if osinteraction.is_mac():
            icon_file = self.os_interaction.get_resource_path(
                'resources/icon.icns')
            self.icon = wx.Icon(icon_file, wx.BITMAP_TYPE_ICON)
        else:
            icon_file = self.os_interaction.get_resource_path(
                'resources/icon.ico')
            self.icon = wx.Icon(icon_file, wx.BITMAP_TYPE_ICO)
        self.SetIcon(self.icon, "Openport")
        self.imgidx = 1

        #     self.CreateMenu()
        self.items = []
Example #12
0
 def check_username_in_config_file(self):
     if not osinteraction.is_windows():
         if osinteraction.getInstance().user_is_root():
             return
         if not os.path.exists(USER_CONFIG_FILE):
             logger.warning(
                 'The file %s does not exist. Your sessions will not be automatically restarted '
                 'on reboot. You can restart your session with "openport --restart-shares"'
                 % USER_CONFIG_FILE)
             return
         username = self.os_interaction.get_username()
         with open(USER_CONFIG_FILE, 'r') as f:
             lines = [l.strip() for l in f.readlines()]
             if username not in lines:
                 logger.warning(
                     'Your username (%s) is not in %s. Your sessions will not be automatically restarted '
                     'on reboot. You can restart your session with "openport --restart-shares"'
                     % (username, USER_CONFIG_FILE))
                 return
Example #13
0
    def __init__(self,
                 parent=None,
                 id=-1,
                 title='Openport - Easy and secure reverse SSH',
                 wx_app=None,
                 db_location=''):

        wx.Frame.__init__(self,
                          parent,
                          -1,
                          title,
                          style=wx.DEFAULT_FRAME_STYLE
                          | wx.NO_FULL_REPAINT_ON_RESIZE)
        self.wx_app = wx_app
        self.addMenuBar()
        self.rebuild()
        self.Bind(wx.EVT_CLOSE, self.onClose)
        self.os_interaction = osinteraction.getInstance()
        self.config = OpenportAppConfig()
        self.config.app = self
        self.config_service = ConfigService(self.config)
        self.app_service = AppService(self.config)
        self.db_location = db_location
        self.db_handler = DBHandler(db_location)

        port = self.config_service.get_and_save_manager_port()
        self.server = GUITcpServer('127.0.0.1', port, self.config,
                                   self.db_handler)

        if osinteraction.is_mac():
            icon_file = self.os_interaction.get_resource_path(
                'resources/icon.icns')
            icon = wx.Icon(icon_file, wx.BITMAP_TYPE_ICON)
        else:
            icon_file = self.os_interaction.get_resource_path(
                'resources/icon.ico')
            icon = wx.Icon(icon_file, wx.BITMAP_TYPE_ICO)

        self.SetIcon(icon)

        self.addTrayIcon()
Example #14
0
def get_logger(name):
    if name in loggers:
        return loggers[name]
    logger = logging.getLogger(name)

    ch = logging.StreamHandler(stdout)
    ch.setFormatter(short_formatter)
    ch.setLevel(log_level)
    logger.addHandler(ch)

    os_interaction = osinteraction.getInstance(use_logger=False)
    fh = logging.handlers.RotatingFileHandler(os_interaction.get_app_data_path(
        '%s.log' % os_interaction.get_app_name()),
                                              maxBytes=1000000,
                                              backupCount=5)
    fh.setFormatter(long_formatter)
    fh.setLevel(logging.DEBUG)
    logger.addHandler(fh)
    logger.setLevel(logging.DEBUG)
    loggers[name] = logger
    return logger
Example #15
0
    def __init__(self):
        self.config = OpenportAppConfig()
        self.config.app = self
        self.manager_app_started = False
        self.os_interaction = osinteraction.getInstance()
        self.args = {}
        self.session = None
        self.openport = Openport()
        self.db_handler = None

        self.server = AppTcpServer('127.0.0.1',
                                   self.os_interaction.get_open_port(),
                                   self.config, self.db_handler)
        self.config_service = ConfigService(self.config)
        self.app_service = AppService(self.config)

        self.argument_parser = argparse.ArgumentParser()

        if self.os_interaction.is_compiled():
            from openport.common.tee import TeeStdErr, TeeStdOut
            TeeStdOut(
                self.os_interaction.get_app_data_path('openport_app.out.log'),
                'a')
            TeeStdErr(
                self.os_interaction.get_app_data_path(
                    'openport_app.error.log'), 'a')
        try:
            if not osinteraction.is_windows():
                signal.signal(signal.SIGINT, self.handleSigTERM)
                signal.signal(signal.SIGTERM, self.handleSigTERM)
            else:
                # To be honest, I don't think this does anything...

                signal.signal(signal.SIGINT, self.handleSigTERM)
                signal.signal(signal.SIGTERM, self.handleSigTERM)

                # self.os_interaction.handle_signals(self.handleSigTERM)
        except ValueError:
            pass
Example #16
0
import cgi
from urlparse import urlparse, parse_qs
import SocketServer
import os
import posixpath
import socket
import urllib
from OpenSSL import SSL
from openport.services.logger_service import get_logger
from openport.services import osinteraction
from ext_http_server import RangeHandler

_file_serve_path = None
_token = None
logger = get_logger(__name__)
os_interaction = osinteraction.getInstance()


class FileServeHandler(RangeHandler):
    def setup(self):
        self.connection = self.request
        self.rfile = socket._fileobject(self.request, "rb", self.rbufsize)
        self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)

    def send_head(self):
        if not self.check_token(): return None
        return self.send_file(_file_serve_path)

    def send_file(self, path):
        f = None
        logger.debug('path = %s' % path)
Example #17
0
 def setUp(self):
     print(self._testMethodName)
     set_log_level(logging.DEBUG)
     #self.test_server = 'http://test.openport.be'
     self.test_server = 'https://test2.openport.io'
     self.osinteraction = osinteraction.getInstance()
Example #18
0
 def __init__(self, openport_app_config):
     self.config = openport_app_config
     self.os_interaction = osinteraction.getInstance()
Example #19
0
def request_port(public_key,
                 local_port=None,
                 url='%s/api/v1/request-port' % DEFAULT_SERVER,
                 restart_session_token='',
                 request_server_port=-1,
                 http_forward=False,
                 automatic_restart=False,
                 forward_tunnel=False,
                 ip_link_protection=None,
                 client_version=VERSION):
    """
    Requests a port on the server using the openPort protocol
    return a tuple with ( server_ip, server_port, message )
    """

    os_interaction = osinteraction.getInstance()
    r = None
    try:
        request_data = {
            'public_key': public_key,
            'request_port': request_server_port,
            'restart_session_token': restart_session_token,
            'http_forward': 'on' if http_forward else '',
            'automatic_restart': 'on' if automatic_restart else '',
            'local_port': local_port if local_port else '',
            'client_version': client_version,
            'forward_tunnel': 'on' if forward_tunnel else '',
            'platform': platform.platform(),
        }
        if ip_link_protection is not None:
            request_data[
                'ip_link_protection'] = 'on' if ip_link_protection else ''

#       if sys.version_info >= (2, 7, 9):
#           import ssl
#           ssl._create_default_https_context = ssl._create_unverified_context
        logger.debug('sending request %s %s' % (url, request_data))
        #
        verify = 'local' not in url and '192.168' not in url and not os.environ.get(
            'NO_SSL_VERIFY')
        r = requests.post(url, data=request_data, verify=verify)
        if r.status_code == 200:
            #logger.debug(r.text)
            return r.json()
        if r.status_code == 500:
            return {'error': r.reason}
        return {
            'error': 'status code: {} text: {}'.format(r.status_code, r.text)
        }
    except requests.HTTPError as e:
        logger.error(
            "An error has occurred while communicating with the openport servers. %s"
            % e)
        if r is not None:
            logger.debug('error: got response: %s' % r.text)
            try:
                error_page_file_path = os_interaction.get_app_data_path(
                    'error.html')
                with open(error_page_file_path, 'w') as f:
                    f.write(r.text)
                    logger.debug('error is available here: %s' %
                                 error_page_file_path)
            except Exception as e:
                logger.debug(e)

        if e.response:
            logger.debug('error: got response: %s' % e.response.text)
            if e.response.status_code == 500:
                try:
                    error_page_file_path = os_interaction.get_app_data_path(
                        'error.html')
                    with open(error_page_file_path, 'w') as f:
                        logger.debug('error is available here: %s' %
                                     error_page_file_path)
                        f.write(e.response.text)
                except Exception as e:
                    logger.debug(e)
        raise
    except Exception as e:
        if r is not None:
            try:
                error_page_file_path = os_interaction.get_app_data_path(
                    'error.html')
                with open(error_page_file_path, 'w') as f:
                    f.write(r.text)
                    logger.debug('error is available here: %s' %
                                 error_page_file_path)
            except Exception as e:
                logger.debug(e)
        logger.error(
            "An error has occurred while communicating with the openport servers. %s"
            % e)
        #logger.exception(e)
        raise e
Example #20
0

if __name__ == '__main__':

    #    port = get_open_port()
    #    s = SimpleTcpServer(port)
    #    s.runThreaded()
    #    sleep(1)
    #
    #    c = SimpleTcpClient('localhost', port)
    #
    #    var = raw_input('Enter something: ')
    #    print 'you entered ', var
    #    print 'server replied', c.send(var)

    port = osinteraction.getInstance().get_open_port()
    s = TestHTTPServer(port)
    s.reply('hooray')
    s.runThreaded()
    sleep(1)

    c = SimpleHTTPClient()

    print 'server replied', c.get('http://localhost:%s' % port)


def run_command_with_timeout(args, timeout_s):
    class Command(object):
        def __init__(self, cmd):
            self.cmd = cmd
            self.process = None