class MainWindow:
    def __init__(self):
            self.root = tk.Tk()
            self.root.title('ARP Detector')
            self.root.geometry('400x350')

            self.arp_button = tk.Button(self.root, text='ARP Detection', command=self.show_arp_page)
            self.arp_button.pack()

            self.icmp_button = tk.Button(self.root, text='ICMP Flood Detection', command=self.show_icmp_page)
            self.icmp_button.pack()

            self.tcp_button = tk.Button(self.root, text='TCP Attack Detection', command=self.show_tcp_page)
            self.tcp_button.pack()

            self.network_button = tk.Button(self.root, text='Network Scanner', command=self.show_network_scanner_page)
            self.network_button.pack()

            self.root.mainloop()

class NetworkScannerPage:
    def __init__(self, master):
        self.master = master
        self.interface = 'ens33'
        self.ip_mac_map = {}

        self.frame = tk.Frame(self.master)
        self.frame.pack()

        self.scan_button = tk.Button(self.frame, text='Scan', command=self.scan_network)
        self.scan_button.pack()

        self.result_label = tk.Label(self.frame, text='')
        self.result_label.pack()

    def scan_network(self):
        for ip in netifaces.ifaddresses(self.interface)[netifaces.AF_INET][0]['addr'].split('.')[:-1]:
            for i in range(1, 255):
                target_ip = f'{ip}.{i}'
                arp_request = ARP(pdst=target_ip)
                arp_reply = sr1(arp_request, timeout=1, verbose=0)
                if arp_reply and arp_reply.hwsrc not in ('00:00:00:00:00:00', get_if_hwaddr(self.interface)):
                    self.ip_mac_map[target_ip] = arp_reply.hwsrc

        result = ''
        for ip, mac in self.ip_mac_map.items():
            result += f'{ip} ({mac})
'
        self.result_label.config(text=result)

class NetworkScannerPageUI:
    def __init__(self, master):
        self.master = master
        self.master.title('Network Scanner')
        self.master.geometry('400x300')

        self.network_scanner_page = NetworkScannerPage(self.master)

# 修改 MainWindow 中的 command
MainWindow.show_network_scanner_page = NetworkScannerPageUI

# 使用 NetworkScannerPageUI 类创建对象
network_scanner_page_ui = NetworkScannerPageUI(tk.Tk())
network_scanner_page_ui.mainloop()

修改 MainWindow 中的 command

为了使用 NetworkScannerPageUI 类显示网络扫描器界面,需要修改 MainWindow 中 network_button 的 command 属性。将 self.show_network_page 替换为 self.show_network_scanner_page

NetworkScannerPageUI 类

NetworkScannerPageUI 类是一个界面对象,负责创建和显示 NetworkScannerPage 类的实例。

init 方法中,首先创建了 NetworkScannerPage 的实例,然后将其添加到主界面中。

总结

通过修改 MainWindow 中的 command 属性并将 NetworkScannerPageUI 类与 NetworkScannerPage 类联系起来,可以实现使用 NetworkScannerPageUI 类创建的界面显示网络扫描器功能。

注意事项

  • 确保已经安装了必要的库,例如 Tkinter、netifaces 和 scapy。
  • 需要根据实际情况修改代码中的 interface 变量,例如 ens33
  • 此代码仅供参考,需要根据具体需求进行修改和完善。
Python 网络扫描器 GUI 应用

原文地址: https://www.cveoy.top/t/topic/jnWu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录