コード例 #1
0
ファイル: page.py プロジェクト: plavc/Port-Scanner
    def init(self):
        self.page_id = -1

        self.workbench = PortsWorkbench()
        self.widget.pack_start(self.workbench.get_widget())

        hostname_input = self.get_input_object("hostname")
        combo_profile = self.get_input_object("c_profile")

        self.he = HostnameEntryHelper(hostname_input)
        self.he.createEntryCompletition()
        self.he.add_hosts(self.storage.get_hosts())

        self.ph = ProfileHelper(combo_profile)
        self.ph.create_combo_box()
        self.ph.add_profiles(self.storage.get_profiles())
コード例 #2
0
ファイル: page.py プロジェクト: plavc/Port-Scanner
class ScannerPage(BaseWidget):
    def __init__(self, storage, widget=None, label=None):
        super(ScannerPage, self).__init__(widget)

        self.label = label

        self.storage = storage
        self.signals = {
            "on_btn_scan_clicked": self.on_btn_scan_clicked,
            "on_chk_single_port_toggled": self.on_chk_single_port_toggled,
            "on_chk_all_port_toggled": self.on_chk_all_port_toggled,
            "on_hostname_input_changed": self.on_hostname_input_changed,
            "on_port_start_input_value_changed": self.on_port_start_input_value_changed,
            "on_port_end_input_value_changed": self.on_port_end_input_value_changed,
            "on_btn_load_profile_clicked": self.on_btn_load_profile_clicked,
            "on_btn_save_profile_clicked": self.on_btn_save_profile_clicked,
        }

        self.builder.connect_signals(self.signals)
        self.init()

    def init(self):
        self.page_id = -1

        self.workbench = PortsWorkbench()
        self.widget.pack_start(self.workbench.get_widget())

        hostname_input = self.get_input_object("hostname")
        combo_profile = self.get_input_object("c_profile")

        self.he = HostnameEntryHelper(hostname_input)
        self.he.createEntryCompletition()
        self.he.add_hosts(self.storage.get_hosts())

        self.ph = ProfileHelper(combo_profile)
        self.ph.create_combo_box()
        self.ph.add_profiles(self.storage.get_profiles())

    def on_btn_load_profile_clicked(self, widget):
        combo_profile = self.get_input_object("c_profile")
        hostname_input = self.get_input_object("hostname")

        if len(hostname_input.get_text()) == 0:
            return

        iter = combo_profile.get_active_iter()

        if iter == None:
            return

        model = combo_profile.get_model()

        profile = model.get_value(iter, 1)

        host = Host(hostname_input.get_text())

        self.workbench.clear()

        for port in profile.get_ports():
            self.workbench.fill_single_port(host, port)

        self.workbench.refresh_ports()

    def on_btn_save_profile_clicked(self, widget):
        combo_profile = self.get_input_object("c_profile")

        title = None

        if len(combo_profile.get_active_text()) > 0:
            title = combo_profile.get_active_text()
        else:
            return

        for p in self.storage.get_profiles():
            if p.get_title() == title:
                return

        ports = self.workbench.get_port_list().get_port_list_keys()
        profile = Profile(title, ports)

        self.storage.add_profile(profile)
        self.storage.save()
        self.ph.add_profiles([profile])

    def on_btn_scan_clicked(self, widgtet):
        hostname_input = self.get_input_object("hostname")
        chk_single_port = self.get_input_object("single_port")
        port_start = self.get_input_object("port_start")
        port_end = self.get_input_object("port_end")

        host = Host(hostname_input.get_text())

        if chk_single_port.get_active():
            self.workbench.fill_single_port(host, port_start.get_value_as_int())
            self.workbench.refresh_ports()
        else:
            self.workbench.fill_port_range(host, port_start.get_value_as_int(), port_end.get_value_as_int())

        self.workbench.refresh_ports()
        self.storage.add_host(host)
        self.storage.save()
        self.he.add_hosts([host])

    def on_chk_single_port_toggled(self, widgtet):
        chk_single_port = self.get_input_object("single_port")
        chk_all_port = self.get_input_object("all_port")

        if chk_single_port.get_active():
            chk_all_port.set_active(False)
        else:
            chk_all_port.set_active(True)
        self.define_port_range()

    def on_chk_all_port_toggled(self, widgtet):
        chk_single_port = self.get_input_object("single_port")
        chk_all_port = self.get_input_object("all_port")

        if chk_all_port.get_active():
            chk_single_port.set_active(False)
        else:
            chk_single_port.set_active(True)

        self.define_port_range()

    def define_port_range(self):
        chk_single_port = self.get_input_object("single_port")
        chk_all_port = self.get_input_object("all_port")
        port_end = self.get_input_object("port_end")

        if chk_single_port.get_active():
            port_end.set_sensitive(False)
            adj = port_end.get_adjustment()
            adj.set_lower(65535)
            port_end.update()

        if chk_all_port.get_active():
            port_end.set_sensitive(True)

    def on_hostname_input_changed(self, widgtet):
        hostname_input = self.get_input_object("hostname")

        host = hostname_input.get_text()

        if len(host) == 0:
            self.update_hostname_input(hostname_input, 0)
            return

        if len(host) < 5:
            self.update_hostname_input(hostname_input, -1)
            return

        host_parts = host.split(".")

        for part in host_parts:
            if not part.isalnum():
                self.update_hostname_input(hostname_input, -1)
                return

        self.update_hostname_input(hostname_input, 1)
        self.label.set_text(host)

    def update_hostname_input(self, entry, valid):
        btn_scan = self.get_input_object("scan")
        btn_p_load = self.get_input_object("btn_p_load")

        if valid == 1:
            entry.set_icon_from_stock(0, "gtk-dialog-info")
            btn_scan.set_sensitive(True)
            btn_p_load.set_sensitive(True)
        elif valid == -1:
            entry.set_icon_from_stock(0, "gtk-dialog-error")
            btn_scan.set_sensitive(False)
            btn_p_load.set_sensitive(False)
        elif valid == 0:
            entry.set_icon_from_stock(0, "gtk-connect")
            btn_scan.set_sensitive(False)
            btn_p_load.set_sensitive(False)

    def on_port_start_input_value_changed(self, widgtet):
        port_end_input = self.get_input_object("port_end")
        port_start_input = self.get_input_object("port_start")

        adj = port_end_input.get_adjustment()
        adj.set_lower(port_start_input.get_value_as_int())
        port_end_input.update()

    def on_port_end_input_value_changed(self, widget):
        port_end_input = self.get_input_object("port_end")
        port_start_input = self.get_input_object("port_start")

        adj = port_start_input.get_adjustment()
        adj.set_upper(port_end_input.get_value_as_int())
        port_start_input.update()

    def set_page_id(self, id):
        self.page_id = id

    def get_page_id(self, id):
        return self.page_id

    def set_label(self, label):
        self.label = label

    def get_status_notebook(self):
        return self.get_input_object("noteST")

    base = {"glade_file": "gui/port_scanner_page_gtk.glade", "widget": "body"}

    input = {
        "single_port": "chk_single_port",
        "all_port": "chk_all_port",
        "scan": "btn_scan",
        "hostname": "hostname_input",
        "port_start": "port_start_input",
        "port_end": "port_end_input",
        "c_profile": "combo_profile",
        "btn_p_load": "btn_load_profile",
        "btn_p_save": "btn_save_profile",
    }