135 lines
6.0 KiB
Python
135 lines
6.0 KiB
Python
import tkinter as tk
|
|
from tkinter import ttk, filedialog, messagebox, scrolledtext
|
|
|
|
from core.ui.basic_ui import BasicUI
|
|
from core.Function.telnet_fun import PortScanner
|
|
|
|
import logging
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class TelnetTab(ttk.Frame, BasicUI):
|
|
def __init__(self, parent):
|
|
super().__init__(parent)
|
|
self.telnet_ui()
|
|
self.telnet_fun = PortScanner(self.result_box)
|
|
|
|
def telnet_ui(self):
|
|
"""端口扫描界面布局"""
|
|
self.create_assigntelnet_section()
|
|
self.create_listtelnet_section()
|
|
self.create_batchtelnet_section()
|
|
self.create_outputping_section()
|
|
# --------------------------------------UI界面布局函数--------------------------------------
|
|
def create_assigntelnet_section(self):
|
|
# 区域标签
|
|
frame = ttk.LabelFrame(self, text="指定端口连接测试")
|
|
frame.pack(side='top', fill='x', padx=10, pady=5)
|
|
|
|
#self.entry_assignIP_A = self.add_input(frame, "本地IP", row=0, col=0)
|
|
self.assignTelnet_IP = self.add_input(frame, "目标IP", row=0, col=0, inivar="202.89.233.100")
|
|
self.assignTelnet_port = self.add_input(frame, "目标端口", row=0, col=1, inivar="443", entry_width=10)
|
|
self.assignTelnet_test = self.add_button(frame, "测试", row=0, col=2, command=self.btn_assignTelnet_test)
|
|
|
|
def create_listtelnet_section(self):
|
|
# 区域标签
|
|
frame = ttk.LabelFrame(self, text="批量端口连接测试")
|
|
frame.pack(side='top', fill='x', padx=10, pady=5)
|
|
|
|
self.listtelnet_IP = self.add_input(frame, "目标IP", row=0, col=0, inivar="202.89.233.100")
|
|
self.listtelnet_ports = self.add_input(frame, "端口列表", row=0, col=1, inivar="21,22,23,25,80,110,143,443,1433,3306,3389", entry_width=40)
|
|
self.listtelnet_start = self.add_button(frame, "开始", row=0, col=2, command=self.btn_listTelnet_start)
|
|
self.listtelnet_stop = self.add_button(frame, "停止", row=0, col=3, command=self.btn_listTelnet_stop)
|
|
|
|
def create_batchtelnet_section(self):
|
|
# 区域标签
|
|
frame = ttk.LabelFrame(self, text="批量端口连接测试")
|
|
frame.pack(side='top', fill='x', padx=10, pady=5)
|
|
|
|
self.batchTelnet_IP = self.add_input(frame, "目标IP", row=0, col=0, inivar="202.89.233.100")
|
|
self.batchTelnet_port_begin = self.add_input(frame, "起始端口", row=0, col=1, inivar="100", entry_width=10)
|
|
self.batchTelnet_port_end = self.add_input(frame, "结束端口", row=0, col=2, inivar="1000", entry_width=10)
|
|
self.batchTelnet_start = self.add_button(frame, "开始", row=0, col=3, command=self.btn_batchTelnet_start)
|
|
self.batchTelnet_stop = self.add_button(frame, "停止", row=0, col=4, command=self.btn_batchTelnet_stop)
|
|
|
|
def create_outputping_section(self):
|
|
# 区域标签
|
|
frame = ttk.LabelFrame(self, text="端口扫描结果输出")
|
|
frame.pack(side='top', fill='x', padx=10, pady=5)
|
|
|
|
self.result_box = scrolledtext.ScrolledText(frame, width=100, height=20)
|
|
self.result_box.pack(pady=10)
|
|
# --------------------------------------按钮回调函数--------------------------------------
|
|
def btn_assignTelnet_test(self):
|
|
self.IP = self.assignTelnet_IP['var'].get()
|
|
self.port = self.assignTelnet_port['var'].get()
|
|
if not self.IP:
|
|
messagebox.showwarning("输入错误", "请输入目标IP或域名!")
|
|
return
|
|
if not self.port:
|
|
messagebox.showwarning("输入错误", "请输入目标端口!")
|
|
return
|
|
try:
|
|
port = int(self.port)
|
|
except ValueError:
|
|
messagebox.showwarning("输入错误", "端口必须是整数!")
|
|
return
|
|
if port < 1 or port > 65535:
|
|
messagebox.showwarning("输入错误", "起始端口最小为1,结束端口最大为65535!")
|
|
return
|
|
logger.info(f"测试{self.IP} 的 {port} 端口连接情况")
|
|
self.telnet_fun.test_connect(self.IP, port)
|
|
|
|
def btn_batchTelnet_start(self):
|
|
self.IP = self.batchTelnet_IP['var'].get()
|
|
self.port_begin = self.batchTelnet_port_begin['var'].get()
|
|
self.port_end = self.batchTelnet_port_end['var'].get()
|
|
if not self.IP:
|
|
messagebox.showwarning("输入错误", "请输入目标IP或域名!")
|
|
return
|
|
if not self.port_begin or not self.port_end:
|
|
messagebox.showwarning("输入错误", "请输入目标端口!")
|
|
return
|
|
try:
|
|
port_begin = int(self.port_begin)
|
|
port_end = int(self.port_end)
|
|
except ValueError:
|
|
messagebox.showwarning("输入错误", "端口必须是整数!")
|
|
return
|
|
if port_begin < 1 or port_end > 65535:
|
|
messagebox.showwarning("输入错误", "起始端口最小为1,结束端口最大为65535!")
|
|
return
|
|
logger.info(f"开始测试{self.IP} 的 {port_begin} 到 {port_end} 端口连接情况")
|
|
self.telnet_fun.start_range_scan(self.IP, port_begin, port_end)
|
|
|
|
def btn_batchTelnet_stop(self):
|
|
logger.info(f"停止测试{self.IP} 的端口连接情况")
|
|
self.telnet_fun.stop_scan()
|
|
|
|
def btn_listTelnet_start(self):
|
|
self.IP = self.listtelnet_IP['var'].get()
|
|
self.ports = self.listtelnet_ports['var'].get()
|
|
|
|
if not self.ports:
|
|
messagebox.showwarning("输入错误", "请输入端口号或范围!")
|
|
return
|
|
|
|
# 支持格式:例如 "22,80,443,8080"
|
|
try:
|
|
ports = [int(p.strip()) for p in self.ports.split(',') if p.strip()]
|
|
except ValueError:
|
|
messagebox.showwarning("输入错误", "端口必须为整数,用逗号分隔")
|
|
return
|
|
|
|
logger.info(f"开始测试{self.IP} 的 {ports} 端口连接情况")
|
|
self.telnet_fun.start_list_scan(self.IP, ports)
|
|
|
|
def btn_listTelnet_stop(self):
|
|
logger.info(f"停止测试{self.IP} 的端口连接情况")
|
|
self.telnet_fun.stop_scan()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|