Python 网络扫描器 GUI 应用
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。 - 此代码仅供参考,需要根据具体需求进行修改和完善。
原文地址: https://www.cveoy.top/t/topic/jnWu 著作权归作者所有。请勿转载和采集!