本文整理汇总了Python中king_phisher.ssh_forward.SSHTCPForwarder.start方法的典型用法代码示例。如果您正苦于以下问题:Python SSHTCPForwarder.start方法的具体用法?Python SSHTCPForwarder.start怎么用?Python SSHTCPForwarder.start使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类king_phisher.ssh_forward.SSHTCPForwarder
的用法示例。
在下文中一共展示了SSHTCPForwarder.start方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: MailSenderThread
# 需要导入模块: from king_phisher.ssh_forward import SSHTCPForwarder [as 别名]
# 或者: from king_phisher.ssh_forward.SSHTCPForwarder import start [as 别名]
class MailSenderThread(threading.Thread):
"""
The King Phisher threaded email message sender. This object manages
the sending of emails for campaigns and supports pausing the sending of
messages which can later be resumed by unpausing. This object reports
its information to the GUI through an optional
:py:class:`.MailSenderSendTab` instance, these two objects
are very interdependent.
"""
def __init__(self, application, target_file, rpc, tab=None):
"""
:param application: The GTK application that the thread is associated with.
:type application: :py:class:`.KingPhisherClientApplication`
:param str target_file: The CSV formatted file to read message targets from.
:param tab: The GUI tab to report information to.
:type tab: :py:class:`.MailSenderSendTab`
:param rpc: The client's connected RPC instance.
:type rpc: :py:class:`.KingPhisherRPCClient`
"""
super(MailSenderThread, self).__init__()
self.daemon = True
self.logger = logging.getLogger('KingPhisher.Client.' + self.__class__.__name__)
self.application = application
self.config = self.application.config
self.target_file = target_file
"""The name of the target file in CSV format."""
self.tab = tab
"""The optional :py:class:`.MailSenderSendTab` instance for reporting status messages to the GUI."""
self.rpc = rpc
self._ssh_forwarder = None
self.smtp_connection = None
"""The :py:class:`smtplib.SMTP` connection instance."""
self.smtp_server = parse_server(self.config['smtp_server'], 25)
self.running = threading.Event()
"""A :py:class:`threading.Event` object indicating if emails are being sent."""
self.paused = threading.Event()
"""A :py:class:`threading.Event` object indicating if the email sending operation is or should be paused."""
self.should_stop = threading.Event()
self.max_messages_per_minute = float(self.config.get('smtp_max_send_rate', 0.0))
def tab_notify_sent(self, emails_done, emails_total):
"""
Notify the tab that messages have been sent.
:param int emails_done: The number of emails that have been sent.
:param int emails_total: The total number of emails that are going to be sent.
"""
if isinstance(self.tab, gui_utilities.GladeGObject):
GLib.idle_add(lambda x: self.tab.notify_sent(*x), (emails_done, emails_total))
def tab_notify_status(self, message):
"""
Handle a status message regarding the message sending operation.
:param str message: The notification message.
"""
self.logger.info(message.lower())
if isinstance(self.tab, gui_utilities.GladeGObject):
GLib.idle_add(self.tab.notify_status, message + '\n')
def tab_notify_stopped(self):
"""
Notify the tab that the message sending operation has stopped.
"""
if isinstance(self.tab, gui_utilities.GladeGObject):
GLib.idle_add(self.tab.notify_stopped)
def server_ssh_connect(self):
"""
Connect to the remote SMTP server over SSH and configure port forwarding
with :py:class:`.SSHTCPForwarder` for tunneling SMTP traffic.
:return: The connection status as one of the :py:class:`.ConnectionErrorReason` constants.
"""
server = parse_server(self.config['ssh_server'], 22)
username = self.config['ssh_username']
password = self.config['ssh_password']
remote_server = parse_server(self.config['smtp_server'], 25)
try:
self._ssh_forwarder = SSHTCPForwarder(
server,
username,
password,
remote_server,
private_key=self.config.get('ssh_preferred_key'),
missing_host_key_policy=ssh_host_key.MissingHostKeyPolicy(self.application)
)
self._ssh_forwarder.start()
except errors.KingPhisherAbortError as error:
self.logger.info("ssh connection aborted ({0})".format(error.message))
except paramiko.AuthenticationException:
self.logger.warning('failed to authenticate to the remote ssh server')
return ConnectionErrorReason.ERROR_AUTHENTICATION_FAILED
except paramiko.SSHException as error:
self.logger.warning("failed with ssh exception '{0}'".format(error.message))
except Exception:
self.logger.warning('failed to connect to the remote ssh server', exc_info=True)
else:
self.smtp_server = self._ssh_forwarder.local_server
return ConnectionErrorReason.SUCCESS
#.........这里部分代码省略.........
示例2: MailSenderThread
# 需要导入模块: from king_phisher.ssh_forward import SSHTCPForwarder [as 别名]
# 或者: from king_phisher.ssh_forward.SSHTCPForwarder import start [as 别名]
class MailSenderThread(threading.Thread):
"""
The King Phisher threaded email message sender. This object manages
the sending of emails for campaigns and supports pausing the sending of
messages which can later be resumed by unpausing. This object reports
its information to the GUI through an optional
:py:class:`.MailSenderSendTab` instance, these two objects
are very interdependent.
"""
def __init__(self, application, target_file, rpc, tab=None):
"""
:param application: The GTK application that the thread is associated with.
:type application: :py:class:`.KingPhisherClientApplication`
:param str target_file: The CSV formatted file to read message targets from.
:param tab: The GUI tab to report information to.
:type tab: :py:class:`.MailSenderSendTab`
:param rpc: The client's connected RPC instance.
:type rpc: :py:class:`.KingPhisherRPCClient`
"""
super(MailSenderThread, self).__init__()
self.daemon = True
self.logger = logging.getLogger('KingPhisher.Client.' + self.__class__.__name__)
self.application = application
self.config = self.application.config
self.target_file = target_file
"""The name of the target file in CSV format."""
self.tab = tab
"""The optional :py:class:`.MailSenderSendTab` instance for reporting status messages to the GUI."""
self.rpc = rpc
self._ssh_forwarder = None
self.smtp_connection = None
"""The :py:class:`smtplib.SMTP` connection instance."""
self.smtp_server = smoke_zephyr.utilities.parse_server(self.config['smtp_server'], 25)
self.running = threading.Event()
"""A :py:class:`threading.Event` object indicating if emails are being sent."""
self.paused = threading.Event()
"""A :py:class:`threading.Event` object indicating if the email sending operation is or should be paused."""
self.should_stop = threading.Event()
self.max_messages_per_minute = float(self.config.get('smtp_max_send_rate', 0.0))
self.mail_options = []
def tab_notify_sent(self, emails_done, emails_total):
"""
Notify the tab that messages have been sent.
:param int emails_done: The number of emails that have been sent.
:param int emails_total: The total number of emails that are going to be sent.
"""
if isinstance(self.tab, gui_utilities.GladeGObject):
GLib.idle_add(lambda x: self.tab.notify_sent(*x), (emails_done, emails_total))
def tab_notify_status(self, message):
"""
Handle a status message regarding the message sending operation.
:param str message: The notification message.
"""
self.logger.info(message.lower())
if isinstance(self.tab, gui_utilities.GladeGObject):
GLib.idle_add(self.tab.notify_status, message + '\n')
def tab_notify_stopped(self):
"""
Notify the tab that the message sending operation has stopped.
"""
if isinstance(self.tab, gui_utilities.GladeGObject):
GLib.idle_add(self.tab.notify_stopped)
def server_ssh_connect(self):
"""
Connect to the remote SMTP server over SSH and configure port forwarding
with :py:class:`.SSHTCPForwarder` for tunneling SMTP traffic.
:return: The connection status as one of the :py:class:`.ConnectionErrorReason` constants.
"""
server = smoke_zephyr.utilities.parse_server(self.config['ssh_server'], 22)
username = self.config['ssh_username']
password = self.config['ssh_password']
remote_server = smoke_zephyr.utilities.parse_server(self.config['smtp_server'], 25)
try:
self._ssh_forwarder = SSHTCPForwarder(
server,
username,
password,
remote_server,
private_key=self.config.get('ssh_preferred_key'),
missing_host_key_policy=ssh_host_key.MissingHostKeyPolicy(self.application)
)
self._ssh_forwarder.start()
except errors.KingPhisherAbortError as error:
self.logger.info("ssh connection aborted ({0})".format(error.message))
except paramiko.AuthenticationException:
self.logger.warning('failed to authenticate to the remote ssh server')
return ConnectionErrorReason.ERROR_AUTHENTICATION_FAILED
except paramiko.SSHException as error:
self.logger.warning("failed with ssh exception '{0}'".format(error.message))
except Exception:
self.logger.warning('failed to connect to the remote ssh server', exc_info=True)
else:
self.smtp_server = self._ssh_forwarder.local_server
#.........这里部分代码省略.........
示例3: KingPhisherClientApplication
# 需要导入模块: from king_phisher.ssh_forward import SSHTCPForwarder [as 别名]
# 或者: from king_phisher.ssh_forward.SSHTCPForwarder import start [as 别名]
class KingPhisherClientApplication(_Gtk_Application):
"""
This is the top level King Phisher client object. It contains the
custom GObject signals, keeps all the GUI references, and manages
the RPC client object. This is also the parent window for most
GTK objects.
:GObject Signals: :ref:`gobject-signals-application-label`
"""
# pylint: disable=too-many-public-methods
__gsignals__ = {
'campaign-changed': (GObject.SIGNAL_RUN_FIRST, None, (str,)),
'campaign-created': (GObject.SIGNAL_RUN_FIRST, None, (str,)),
'campaign-delete': (GObject.SIGNAL_ACTION | GObject.SIGNAL_RUN_LAST, None, (str,)),
'campaign-set': (GObject.SIGNAL_RUN_FIRST, None, (str,)),
'config-load': (GObject.SIGNAL_ACTION | GObject.SIGNAL_RUN_LAST, None, (bool,)),
'config-save': (GObject.SIGNAL_ACTION | GObject.SIGNAL_RUN_LAST, None, ()),
'credential-delete': (GObject.SIGNAL_ACTION | GObject.SIGNAL_RUN_LAST, None, (object,)),
'exit': (GObject.SIGNAL_ACTION | GObject.SIGNAL_RUN_LAST, None, ()),
'exit-confirm': (GObject.SIGNAL_ACTION | GObject.SIGNAL_RUN_LAST, None, ()),
'message-delete': (GObject.SIGNAL_ACTION | GObject.SIGNAL_RUN_LAST, None, (object,)),
'message-sent': (GObject.SIGNAL_RUN_FIRST, None, (str, str)),
'reload-css-style': (GObject.SIGNAL_ACTION | GObject.SIGNAL_RUN_LAST, None, ()),
'rpc-cache-clear': (GObject.SIGNAL_ACTION | GObject.SIGNAL_RUN_LAST, None, ()),
'server-connected': (GObject.SIGNAL_RUN_FIRST, None, ()),
'server-disconnected': (GObject.SIGNAL_RUN_FIRST, None, ()),
'sftp-client-start': (GObject.SIGNAL_ACTION | GObject.SIGNAL_RUN_LAST, None, ()),
'visit-delete': (GObject.SIGNAL_ACTION | GObject.SIGNAL_RUN_LAST, None, (object,)),
}
def __init__(self, config_file=None, use_plugins=True, use_style=True):
super(KingPhisherClientApplication, self).__init__()
if use_style:
self._theme_file = 'theme.css'
else:
self._theme_file = DISABLED
self.logger = logging.getLogger('KingPhisher.Client.Application')
# log version information for debugging purposes
self.logger.debug("gi.repository GLib version: {0}".format('.'.join(map(str, GLib.glib_version))))
self.logger.debug("gi.repository GObject version: {0}".format('.'.join(map(str, GObject.pygobject_version))))
self.logger.debug("gi.repository Gtk version: {0}.{1}.{2}".format(Gtk.get_major_version(), Gtk.get_minor_version(), Gtk.get_micro_version()))
if rpc_terminal.has_vte:
self.logger.debug("gi.repository VTE version: {0}".format(rpc_terminal.Vte._version))
if graphs.has_matplotlib:
self.logger.debug("matplotlib version: {0}".format(graphs.matplotlib.__version__))
self.set_property('application-id', 'org.king-phisher.client')
self.set_property('register-session', True)
self.config_file = config_file or os.path.join(USER_DATA_PATH, 'config.json')
"""The file containing the King Phisher client configuration."""
if not os.path.isfile(self.config_file):
self._create_config()
self.config = None
"""The primary King Phisher client configuration."""
self.main_window = None
"""The primary top-level :py:class:`~.MainAppWindow` instance."""
self.rpc = None
"""The :py:class:`~.KingPhisherRPCClient` instance for the application."""
self._ssh_forwarder = None
"""The SSH forwarder responsible for tunneling RPC communications."""
self.style_provider = None
try:
self.emit('config-load', True)
except IOError:
self.logger.critical('failed to load the client configuration')
raise
self.connect('window-added', self.signal_window_added)
self.actions = {}
self._create_actions()
if not use_plugins:
self.logger.info('disabling all plugins')
self.config['plugins.enabled'] = []
self.plugin_manager = plugins.ClientPluginManager(
[os.path.join(USER_DATA_PATH, 'plugins'), find.find_data_directory('plugins')],
self
)
if use_plugins:
self.plugin_manager.load_all()
def _create_actions(self):
action = Gio.SimpleAction.new('emit-application-signal', GLib.VariantType.new('s'))
action.connect('activate', self.action_emit_application_signal)
accelerators = (
('<Control><Shift>F1', 'rpc-cache-clear'),
('<Control><Shift>F2', 'config-save'),
('<Control><Shift>F12', 'reload-css-style')
)
for key, signal_name in accelerators:
if Gtk.check_version(3, 14, 0):
self.add_accelerator(key, 'win.emit-application-signal', GLib.Variant.new_string(signal_name))
else:
self.set_accels_for_action("win.emit-application-signal('{0}')".format(signal_name), (key,))
self.actions['emit-application-signal'] = action
self.add_action(action)
def _create_ssh_forwarder(self, server, username, password):
"""
Create and set the
:py:attr:`~.KingPhisherClientApplication._ssh_forwarder` attribute.
#.........这里部分代码省略.........
示例4: MailSenderThread
# 需要导入模块: from king_phisher.ssh_forward import SSHTCPForwarder [as 别名]
# 或者: from king_phisher.ssh_forward.SSHTCPForwarder import start [as 别名]
class MailSenderThread(threading.Thread):
"""
The King Phisher threaded email message sender. This object manages
the sending of emails for campaigns and supports pausing the sending of
messages which can later be resumed by unpausing. This object reports
its information to the GUI through an optional
:py:class:`.MailSenderSendTab` instance, these two objects
are very interdependent.
"""
def __init__(self, config, target_file, rpc, tab=None):
"""
:param dict config: The King Phisher client configuration.
:param str target_file: The CSV formatted file to read message targets from.
:param tab: The GUI tab to report information to.
:type tab: :py:class:`.MailSenderSendTab`
:param rpc: The client's connected RPC instance.
:type rpc: :py:class:`.KingPhisherRPCClient`
"""
super(MailSenderThread, self).__init__()
self.daemon = True
self.logger = logging.getLogger('KingPhisher.Client.' + self.__class__.__name__)
self.config = config
self.target_file = target_file
"""The name of the target file in CSV format."""
self.tab = tab
"""The optional :py:class:`.MailSenderSendTab` instance for reporting status messages to the GUI."""
self.rpc = rpc
self._ssh_forwarder = None
self.smtp_connection = None
"""The :py:class:`smtplib.SMTP` connection instance."""
self.smtp_server = parse_server(self.config['smtp_server'], 25)
self.running = threading.Event()
"""A :py:class:`threading.Event` object indicating if emails are being sent."""
self.paused = threading.Event()
"""A :py:class:`threading.Event` object indicating if the email sending operation is or should be paused."""
self.should_exit = threading.Event()
self.max_messages_per_minute = float(self.config.get('smtp_max_send_rate', 0.0))
self._mime_attachments = None
def tab_notify_sent(self, emails_done, emails_total):
"""
Notify the tab that messages have been sent.
:param int emails_done: The number of emails that have been sent.
:param int emails_total: The total number of emails that are going to be sent.
"""
if isinstance(self.tab, gui_utilities.GladeGObject):
GLib.idle_add(lambda x: self.tab.notify_sent(*x), (emails_done, emails_total))
def tab_notify_status(self, message):
"""
Handle a status message regarding the message sending operation.
:param str message: The notification message.
"""
self.logger.info(message.lower())
if isinstance(self.tab, gui_utilities.GladeGObject):
GLib.idle_add(self.tab.notify_status, message + '\n')
def tab_notify_stopped(self):
"""
Notify the tab that the message sending operation has stopped.
"""
if isinstance(self.tab, gui_utilities.GladeGObject):
GLib.idle_add(self.tab.notify_stopped)
def server_ssh_connect(self):
"""
Connect to the remote SMTP server over SSH and configure port
forwarding with :py:class:`.SSHTCPForwarder` for tunneling SMTP
traffic.
:return: The connection status.
:rtype: bool
"""
server = parse_server(self.config['ssh_server'], 22)
username = self.config['ssh_username']
password = self.config['ssh_password']
remote_server = parse_server(self.config['smtp_server'], 25)
local_port = random.randint(2000, 6000)
try:
self._ssh_forwarder = SSHTCPForwarder(server, username, password, local_port, remote_server, preferred_private_key=self.config.get('ssh_preferred_key'))
self._ssh_forwarder.start()
time.sleep(0.5)
except Exception:
self.logger.warning('failed to connect to remote ssh server', exc_info=True)
return False
self.smtp_server = ('localhost', local_port)
return True
def server_smtp_connect(self):
"""
Connect to the configured SMTP server.
:return: The connection status.
:rtype: bool
"""
if self.config.get('smtp_ssl_enable', False):
SmtpClass = smtplib.SMTP_SSL
else:
#.........这里部分代码省略.........
示例5: KingPhisherClientApplication
# 需要导入模块: from king_phisher.ssh_forward import SSHTCPForwarder [as 别名]
# 或者: from king_phisher.ssh_forward.SSHTCPForwarder import start [as 别名]
class KingPhisherClientApplication(_Gtk_Application):
"""
This is the top level King Phisher client object. It contains the
custom GObject signals, keeps all the GUI references, and manages
the RPC client object. This is also the parent window for most
GTK objects.
:GObject Signals: :ref:`gobject-signals-application-label`
"""
__gsignals__ = {
'campaign-set': (GObject.SIGNAL_RUN_FIRST, None, (str,)),
'exit': (GObject.SIGNAL_RUN_LAST, None, ()),
'exit-confirm': (GObject.SIGNAL_RUN_LAST, None, ()),
'reload-css-style': (GObject.SIGNAL_RUN_FIRST, None, ()),
'rpc-cache-clear': (GObject.SIGNAL_RUN_FIRST, None, ()),
'server-connected': (GObject.SIGNAL_RUN_LAST, None, ())
}
def __init__(self, config_file=None):
super(KingPhisherClientApplication, self).__init__()
self.logger = logging.getLogger('KingPhisher.Client.Application')
# log version information for debugging purposes
self.logger.debug("gi.repository GLib version: {0}".format('.'.join(map(str, GLib.glib_version))))
self.logger.debug("gi.repository GObject version: {0}".format('.'.join(map(str, GObject.pygobject_version))))
self.logger.debug("gi.repository Gtk version: {0}.{1}.{2}".format(Gtk.get_major_version(), Gtk.get_minor_version(), Gtk.get_micro_version()))
if tools.has_vte:
self.logger.debug("gi.repository VTE version: {0}".format(tools.Vte._version))
if graphs.has_matplotlib:
self.logger.debug("matplotlib version: {0}".format(graphs.matplotlib.__version__))
self.set_property('application-id', 'org.king-phisher.client')
self.set_property('register-session', True)
self.config_file = (config_file or CONFIG_FILE_PATH)
"""The file containing the King Phisher client configuration."""
self.config = None
"""The primary King Phisher client configuration."""
self.main_window = None
"""The primary top-level :py:class:`~.MainApplicationWindow` instance."""
self.rpc = None
"""The :py:class:`~.KingPhisherRPCClient` instance for the application."""
self._ssh_forwarder = None
"""The SSH forwarder responsible for tunneling RPC communications."""
self.style_provider = None
try:
self.load_config(load_defaults=True)
except IOError:
self.logger.critical('failed to load the client configuration')
raise
self.connect('window-added', self.signal_window_added)
self.actions = {}
self._create_actions()
def _create_actions(self):
action = Gio.SimpleAction.new('emit-application-signal', GLib.VariantType.new('s'))
action.connect('activate', self.action_emit_application_signal)
accelerators = (
('<Control><Shift>F1', 'rpc-cache-clear'),
('<Control><Shift>F12', 'reload-css-style')
)
for key, signal_name in accelerators:
if Gtk.check_version(3, 14, 0):
self.add_accelerator(key, 'win.emit-application-signal', GLib.Variant.new_string(signal_name))
else:
self.set_accels_for_action("win.emit-application-signal('{0}')".format(signal_name), (key,))
self.actions['emit-application-signal'] = action
self.add_action(action)
def _create_ssh_forwarder(self, server, username, password):
"""
Create and set the
:py:attr:`~.KingPhisherClientApplication._ssh_forwarder` attribute.
:param tuple server: The server information as a host and port tuple.
:param str username: The username to authenticate to the SSH server with.
:param str password: The password to authenticate to the SSH server with.
:rtype: int
:return: The local port that is forwarded to the remote server or None if the connection failed.
"""
active_window = self.get_active_window()
title_ssh_error = 'Failed To Connect To The SSH Service'
server_remote_port = self.config['server_remote_port']
local_port = random.randint(2000, 6000)
try:
self._ssh_forwarder = SSHTCPForwarder(server, username, password, local_port, ('127.0.0.1', server_remote_port), preferred_private_key=self.config['ssh_preferred_key'])
self._ssh_forwarder.start()
time.sleep(0.5)
self.logger.info('started ssh port forwarding')
except paramiko.AuthenticationException:
self.logger.warning('failed to authenticate to the remote ssh server')
gui_utilities.show_dialog_error(title_ssh_error, active_window, 'The server responded that the credentials are invalid.')
except socket.error as error:
gui_utilities.show_dialog_exc_socket_error(error, active_window, title=title_ssh_error)
except Exception as error:
self.logger.warning('failed to connect to the remote ssh server', exc_info=True)
gui_utilities.show_dialog_error(title_ssh_error, active_window, "An {0}.{1} error occurred.".format(error.__class__.__module__, error.__class__.__name__))
else:
return local_port
self.server_disconnect()
return
#.........这里部分代码省略.........
示例6: MailSenderThread
# 需要导入模块: from king_phisher.ssh_forward import SSHTCPForwarder [as 别名]
# 或者: from king_phisher.ssh_forward.SSHTCPForwarder import start [as 别名]
class MailSenderThread(threading.Thread):
def __init__(self, config, target_file, tab, rpc):
super(MailSenderThread, self).__init__()
self.logger = logging.getLogger('KingPhisher.Client.' + self.__class__.__name__)
self.config = config
self.target_file = target_file
self.tab = tab
self.rpc = rpc
self.ssh_forwarder = None
self.smtp_connection = None
self.smtp_server = utilities.server_parse(self.config['smtp_server'], 25)
self.running = threading.Event()
self.paused = threading.Event()
self.should_exit = threading.Event()
self.max_messages_per_minute = float(self.config.get('smtp_max_send_rate', 0.0))
def server_ssh_connect(self):
server = utilities.server_parse(self.config['ssh_server'], 22)
username = self.config['ssh_username']
password = self.config['ssh_password']
remote_server = utilities.server_parse(self.config['smtp_server'], 25)
local_port = random.randint(2000, 6000)
try:
self.ssh_forwarder = SSHTCPForwarder(server, username, password, local_port, remote_server, preferred_private_key=self.config.get('ssh_preferred_key'))
self.ssh_forwarder.start()
time.sleep(0.5)
except:
self.logger.warning('failed to connect to remote ssh server')
return False
self.smtp_server = ('localhost', local_port)
return True
def server_smtp_connect(self):
if self.config.get('smtp_ssl_enable', False):
SMTP_CLASS = smtplib.SMTP_SSL
else:
SMTP_CLASS = smtplib.SMTP
try:
self.smtp_connection = SMTP_CLASS(*self.smtp_server)
except:
return False
return True
def server_smtp_disconnect(self):
if self.smtp_connection:
try:
self.smtp_connection.quit()
except smtplib.SMTPServerDisconnected:
pass
self.smtp_connection = None
GLib.idle_add(self.tab.notify_status, 'Disconnected From SMTP Server\n')
def server_smtp_reconnect(self):
if self.smtp_connection:
try:
self.smtp_connection.quit()
except smtplib.SMTPServerDisconnected:
pass
self.smtp_connection = None
while not self.server_smtp_connect():
GLib.idle_add(self.tab.notify_status, 'Failed To Reconnect To The SMTP Server\n')
if not self.process_pause(True):
return False
return True
def count_emails(self, target_file):
targets = 0
target_file_h = open(target_file, 'r')
csv_reader = csv.DictReader(target_file_h, ['first_name', 'last_name', 'email_address'])
for target in csv_reader:
targets += 1
target_file_h.close()
return targets
def run(self):
emails_done = 0
emails_total = self.count_emails(self.target_file)
max_messages_per_connection = self.config.get('mailer.max_messages_per_connection', 5)
self.running.set()
self.should_exit.clear()
self.paused.clear()
target_file_h = open(self.target_file, 'r')
csv_reader = csv.DictReader(target_file_h, ['first_name', 'last_name', 'email_address'])
for target in csv_reader:
iteration_time = time.time()
if emails_done > 0 and (emails_done % max_messages_per_connection):
self.server_smtp_reconnect()
if self.should_exit.is_set():
GLib.idle_add(self.tab.notify_status, 'Sending Emails Cancelled\n')
break
if not self.process_pause():
break
uid = make_uid()
emails_done += 1
GLib.idle_add(self.tab.notify_status, "Sending Email {0} of {1} To {2} With UID: {3}\n".format(emails_done, emails_total, target['email_address'], uid))
msg = self.create_email(target['first_name'], target['last_name'], target['email_address'], uid)
if not self.try_send_email(target['email_address'], msg):
break
GLib.idle_add(lambda x: self.tab.notify_sent(*x), (emails_done, emails_total))
#.........这里部分代码省略.........
示例7: KingPhisherClient
# 需要导入模块: from king_phisher.ssh_forward import SSHTCPForwarder [as 别名]
# 或者: from king_phisher.ssh_forward.SSHTCPForwarder import start [as 别名]
class KingPhisherClient(_Gtk_ApplicationWindow):
"""
This is the top level King Phisher client object. It contains the
custom GObject signals, keeps all the GUI references, and manages
the RPC client object. This is also the parent window for most
GTK objects.
:GObject Signals: :ref:`gobject-signals-kingphisher-client-label`
"""
__gsignals__ = {
'campaign-set': (GObject.SIGNAL_RUN_FIRST, None, (str,)),
'exit': (GObject.SIGNAL_RUN_LAST, None, ()),
'exit-confirm': (GObject.SIGNAL_RUN_LAST, None, ()),
'server-connected': (GObject.SIGNAL_RUN_FIRST, None, ())
}
def __init__(self, config, application):
"""
:param dict config: The main King Phisher client configuration.
:param application: The application instance to which this window belongs.
:type application: :py:class:`.KingPhisherClientApplication`
"""
assert isinstance(application, Gtk.Application)
super(KingPhisherClient, self).__init__(application=application)
self.application = application
self.logger = logging.getLogger('KingPhisher.Client.MainWindow')
self.config = config
"""The main King Phisher client configuration."""
self._ssh_forwarder = None
self.set_property('title', 'King Phisher')
vbox = Gtk.Box()
vbox.set_property('orientation', Gtk.Orientation.VERTICAL)
vbox.show()
self.add(vbox)
default_icon_file = find.find_data_file('king-phisher-icon.svg')
if default_icon_file:
icon_pixbuf = GdkPixbuf.Pixbuf.new_from_file(default_icon_file)
self.set_default_icon(icon_pixbuf)
action_group = Gtk.ActionGroup(name="client_window_actions")
self._add_menu_actions(action_group)
uimanager = self._create_ui_manager()
self._add_menu_optional_actions(action_group, uimanager)
self.add_accel_group(uimanager.get_accel_group())
uimanager.insert_action_group(action_group)
self.uimanager = uimanager
menubar = uimanager.get_widget("/MenuBar")
vbox.pack_start(menubar, False, False, 0)
# create notebook and tabs
self.notebook = Gtk.Notebook()
"""The primary :py:class:`Gtk.Notebook` that holds the top level taps of the client GUI."""
self.notebook.connect('switch-page', self.signal_notebook_switch_page)
self.notebook.set_scrollable(True)
vbox.pack_start(self.notebook, True, True, 0)
self.tabs = {}
current_page = self.notebook.get_current_page()
self.last_page_id = current_page
mailer_tab = MailSenderTab(self.config, self, self.application)
self.tabs['mailer'] = mailer_tab
self.notebook.insert_page(mailer_tab.box, mailer_tab.label, current_page + 1)
self.notebook.set_current_page(current_page + 1)
campaign_tab = CampaignViewTab(self.config, self, self.application)
campaign_tab.box.show()
self.tabs['campaign'] = campaign_tab
self.notebook.insert_page(campaign_tab.box, campaign_tab.label, current_page + 2)
self.set_size_request(800, 600)
self.connect('delete-event', self.signal_delete_event)
self.notebook.show()
self.show()
self.rpc = None # needs to be initialized last
"""The :py:class:`.KingPhisherRPCClient` instance."""
login_dialog = dialogs.LoginDialog(self.config, self)
login_dialog.dialog.connect('response', self.signal_login_dialog_response, login_dialog)
login_dialog.dialog.show()
def _add_menu_actions(self, action_group):
# File Menu Actions
action = Gtk.Action(name='FileMenu', label='File', tooltip=None, stock_id=None)
action_group.add_action(action)
action = Gtk.Action(name='FileOpenCampaign', label='_Open Campaign', tooltip='Open a Campaign', stock_id=Gtk.STOCK_NEW)
action.connect('activate', lambda x: self.show_campaign_selection())
action_group.add_action_with_accel(action, '<control>O')
action = Gtk.Action(name='FileImportMenu', label='Import', tooltip=None, stock_id=None)
action_group.add_action(action)
action = Gtk.Action(name='FileImportMessageConfiguration', label='Message Configuration', tooltip='Message Configuration', stock_id=None)
action.connect('activate', lambda x: self.tabs['mailer'].import_message_data())
action_group.add_action(action)
action = Gtk.Action(name='FileExportMenu', label='Export', tooltip=None, stock_id=None)
action_group.add_action(action)
action = Gtk.Action(name='FileExportCampaignXML', label='Campaign XML', tooltip='Campaign XML', stock_id=None)
action.connect('activate', lambda x: self.export_campaign_xml())
#.........这里部分代码省略.........
示例8: KingPhisherClient
# 需要导入模块: from king_phisher.ssh_forward import SSHTCPForwarder [as 别名]
# 或者: from king_phisher.ssh_forward.SSHTCPForwarder import start [as 别名]
class KingPhisherClient(Gtk.Window):
__gsignals__ = {
'campaign_set': (GObject.SIGNAL_RUN_FIRST, None, (str,))
}
def __init__(self, config_file=None):
super(KingPhisherClient, self).__init__()
self.logger = logging.getLogger('KingPhisher.Client')
self.config_file = (config_file or CONFIG_FILE_PATH)
self.load_config()
self.set_property('title', 'King Phisher')
vbox = Gtk.Box()
vbox.set_property('orientation', Gtk.Orientation.VERTICAL)
vbox.show()
self.add(vbox)
action_group = Gtk.ActionGroup("client_window_actions")
self._add_menu_actions(action_group)
uimanager = self._create_ui_manager()
uimanager.insert_action_group(action_group)
self.uimanager = uimanager
menubar = uimanager.get_widget("/MenuBar")
vbox.pack_start(menubar, False, False, 0)
# create notebook and tabs
hbox = Gtk.Box()
hbox.set_property('orientation', Gtk.Orientation.HORIZONTAL)
hbox.show()
self.notebook = Gtk.Notebook()
self.notebook.connect('switch-page', self._tab_changed)
self.notebook.set_scrollable(True)
hbox.pack_start(self.notebook, True, True, 0)
vbox.pack_start(hbox, True, True, 0)
self.tabs = {}
current_page = self.notebook.get_current_page()
self.last_page_id = current_page
mailer_tab = MailSenderTab(self.config, self)
self.tabs['mailer'] = mailer_tab
self.notebook.insert_page(mailer_tab.box, mailer_tab.label, current_page + 1)
self.notebook.set_current_page(current_page + 1)
campaign_tab = CampaignViewTab(self.config, self)
campaign_tab.box.show()
self.tabs['campaign'] = campaign_tab
self.notebook.insert_page(campaign_tab.box, campaign_tab.label, current_page + 2)
self.set_size_request(800, 600)
self.connect('destroy', self.signal_window_destroy)
self.notebook.show()
self.show()
self.rpc = None
self.ssh_forwarder = None
def _add_menu_actions(self, action_group):
# File Menu Actions
action = Gtk.Action('FileMenu', 'File', None, None)
action_group.add_action(action)
action = Gtk.Action('FileOpenCampaign', '_Open Campaign', 'Open a Campaign', Gtk.STOCK_NEW)
action.connect('activate', lambda x: self.show_campaign_selection())
action_group.add_action_with_accel(action, '<control>O')
action = Gtk.Action('FileExportMenu', 'Export', None, None)
action_group.add_action(action)
action = Gtk.Action('FileExportXML', 'Export XML', 'Export XML', None)
action.connect('activate', lambda x: self.export_xml())
action_group.add_action(action)
action = Gtk.Action('FileQuit', None, None, Gtk.STOCK_QUIT)
action.connect('activate', lambda x: self.client_quit())
action_group.add_action_with_accel(action, '<control>Q')
# Edit Menu Actions
action = Gtk.Action('EditMenu', 'Edit', None, None)
action_group.add_action(action)
action = Gtk.Action('EditPreferences', 'Preferences', 'Edit preferences', Gtk.STOCK_EDIT)
action.connect('activate', lambda x: self.edit_preferences())
action_group.add_action(action)
action = Gtk.Action('EditDeleteCampaign', 'Delete Campaign', 'Delete Campaign', None)
action.connect('activate', lambda x: self.delete_campaign())
action_group.add_action(action)
action = Gtk.Action('EditStopService', 'Stop Service', 'Stop Remote King-Phisher Service', None)
action.connect('activate', lambda x: self.stop_remote_service())
action_group.add_action(action)
# Tools Menu Action
action = Gtk.Action('ToolsMenu', 'Tools', None, None)
action_group.add_action(action)
action = Gtk.Action('ToolsRPCTerminal', 'RPC Terminal', 'RPC Terminal', None)
action.connect('activate', lambda x: KingPhisherClientRPCTerminal(self.config, self))
action_group.add_action(action)
# Help Menu Actions
action = Gtk.Action('HelpMenu', 'Help', None, None)
#.........这里部分代码省略.........