Python 端口扫描器的 GUI 界面实现方法

2023-04-21 00:00:00 端口 界面 扫描器

Python 端口扫描器的 GUI 界面可以使用 Tkinter 模块来实现。

首先,需要创建一个窗口,使用 Tkinter 的 Tk() 方法创建:

import tkinter as tk

root = tk.Tk()
root.title("端口扫描器")
root.geometry("400x300")

然后,可以在窗口中添加控件,例如标签、输入框、按钮等,使用 Tkinter 的 Label()、Entry()、Button() 等方法来创建:

label_target = tk.Label(root, text="目标地址:")
label_target.grid(row=0, column=0, padx=10, pady=10)

entry_target = tk.Entry(root)
entry_target.grid(row=0, column=1, padx=10, pady=10)

button_scan = tk.Button(root, text="扫描", command=scan_ports)
button_scan.grid(row=1, column=0, columnspan=2, padx=10, pady=10)

其中,使用 grid() 方法将控件定位到指定的行列位置,并设置布局参数,如 padx 和 pady 表示控件的水平和垂直方向的间距。

最后,需要实现扫描端口的函数并与按钮的执行命令关联起来,例如:

import socket

def scan_ports():
    target = entry_target.get()
    for port in range(1, 1025):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect((target, port))
            print("Port %d is open" % port)
        except:
            pass
        s.close()

完整的代码如下:

import tkinter as tk
import socket

root = tk.Tk()
root.title("端口扫描器")
root.geometry("400x300")

label_target = tk.Label(root, text="目标地址:")
label_target.grid(row=0, column=0, padx=10, pady=10)

entry_target = tk.Entry(root)
entry_target.grid(row=0, column=1, padx=10, pady=10)

button_scan = tk.Button(root, text="扫描", command=scan_ports)
button_scan.grid(row=1, column=0, columnspan=2, padx=10, pady=10)

def scan_ports():
    target = entry_target.get()
    for port in range(1, 1025):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect((target, port))
            print("Port %d is open" % port)
        except:
            pass
        s.close()

root.mainloop()

在命令行中执行该脚本,就可以看到 GUI 界面,并在扫描端口时输出开启的端口号。需要注意的是,在 GUI 界面中,控件的操作需要放在主循环中执行,因此需要在最后添加 root.mainloop() 语句。

相关文章