我今天做了一个端口扫描仪,GUI 目前还很粗糙,但是在测试它时我注意到,当按“扫描端口”时它什么也不做。我在我的代码中找不到任何明显的东西。我错过了什么?
import socket
import PySimpleGUI as sg
def scan_ports(target_ip, start_port, end_port):
print(f"Scanning ports on {target_ip}...")
for port in range(start_port, end_port + 1):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.setdefaulttimeout(1)
result = sock.connect_ex((target_ip, port))
if result == 0:
print(f"Port {port} is open")
sock.close()
except KeyboardInterrupt:
print("Scan interrupted by user.")
break
except socket.error:
print("Couldn't connect to server.")
break
def port_scan_window():
layoutport = [
[sg.Text(" IP: Starting port: Ending port:")],
[sg.Button("Scan ports", key="-SCAN-"), sg.Input(key="-PORTIP-"), sg.Input(key="-START-"), sg.Input(key="-END-")],
[sg.Output(size=(30,20))],
[sg.Button("Exit")]
]
port_window = sg.Window('Port scanner', layoutport)
while True:
event, values = port_window.Read()
if event in (None, "Scan ports"):
print("Scanning " + values["-PORTIP-"] + " for Open ports")
scan_ports(target_ip=values["-PORTIP-"], start_port=values["-START-"], end_port=values["-END-"])
elif event in (None, "Exit"):
break
port_window.Close()
port_scan_window()
event
是您在 -SCAN-
中定义的 sg.Button("Scan ports", key="-SCAN-")
。
所以这应该有效:
if event in (None, "-SCAN-"):
如果您没有使用
Scan ports
,该事件将会是 key
:
sg.Button("Scan ports")
或者如果您已将
key
设置为 'Scan ports'
:
sg.Button("Scan ports", key='Scan ports')
另外,关闭窗口时
event
是None
。因此,当按下 scan_ports
按钮时,您正在呼叫 X
。
您可能想使用:
if event == "-SCAN-":
或
if event == "Scan ports":
相反。
您可以尝试替换以下行
if event in (None, "Scan ports"):
与
if event == "-SCAN-":