refactor(main): 优化代码结构并添加注释

- 为关键代码段添加注释,提高代码可读性
- 优化变量命名,使其更具描述性- 调整代码布局,增强可维护性
This commit is contained in:
fly6516 2025-01-07 15:39:56 +08:00
parent 2f202448f7
commit 8d385e54e2

25
main.py
View File

@ -14,9 +14,9 @@ def get_local_info():
Returns:
tuple: 包含主机名MAC地址和IP地址列表的元组
"""
hostname = socket.gethostname()
local_ips = socket.gethostbyname_ex(hostname)[-1]
mac = ':'.join(re.findall('..', '%012x' % uuid.getnode()))
hostname = socket.gethostname() # 获取主机名
local_ips = socket.gethostbyname_ex(hostname)[-1] # 获取本机的IP地址列表
mac = ':'.join(re.findall('..', '%012x' % uuid.getnode())) # 获取MAC地址
return hostname, mac, local_ips
# 验证 IP 地址或域名
@ -30,8 +30,8 @@ def validate_ip_or_domain(value):
Returns:
bool: 如果输入值有效返回True否则返回False
"""
ip_pattern = re.compile(r'^\d{1,3}(\.\d{1,3}){3}$')
domain_pattern = re.compile(r'^([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$')
ip_pattern = re.compile(r'^\d{1,3}(\.\d{1,3}){3}$') # 匹配IPv4地址的正则
domain_pattern = re.compile(r'^([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$') # 匹配域名的正则
return ip_pattern.match(value) or domain_pattern.match(value)
# 验证端口号
@ -64,14 +64,14 @@ def construct_ip_header(src_ip, dest_ip, payload_length, protocol):
version = 4
ihl = 5
tos = 0
total_length = 20 + payload_length
total_length = 20 + payload_length # IP头部20字节 + 数据部分
identification = 54321
flags_offset = 0
ttl = 64
header_checksum = 0
src_ip_bytes = socket.inet_aton(src_ip)
dest_ip_bytes = socket.inet_aton(dest_ip)
src_ip_bytes = socket.inet_aton(src_ip) # 将源IP转换为二进制格式
dest_ip_bytes = socket.inet_aton(dest_ip) # 将目标IP转换为二进制格式
ip_header = struct.pack('!BBHHHBBH4s4s',
(version << 4) + ihl, tos, total_length,
identification, flags_offset, ttl, protocol,
@ -248,6 +248,7 @@ def send_packet():
window = tk.Tk()
window.title("网络通信软件")
# 获取本机信息
hostname, mac, local_ips = get_local_info()
tk.Label(window, text="本机信息:").grid(row=0, column=0)
@ -256,27 +257,35 @@ info_text.grid(row=0, column=1, columnspan=2)
info_text.insert(tk.END, f"主机名: {hostname}\nMAC 地址: {mac}\n可用 IP: {', '.join(local_ips)}")
info_text.config(state=tk.DISABLED)
# 配置IP地址选择
tk.Label(window, text="本机 IP 地址:").grid(row=1, column=0)
ip_combobox = ttk.Combobox(window, values=local_ips)
ip_combobox.grid(row=1, column=1)
ip_combobox.current(0)
# 配置目标地址输入框
tk.Label(window, text="目标地址:").grid(row=2, column=0)
dest_entry = tk.Entry(window)
dest_entry.grid(row=2, column=1)
# 配置目标端口输入框
tk.Label(window, text="目标端口:").grid(row=3, column=0)
port_entry = tk.Entry(window)
port_entry.grid(row=3, column=1)
# 配置报文类型选择
tk.Label(window, text="报文类型:").grid(row=4, column=0)
var = tk.StringVar(value="ICMP")
tk.Radiobutton(window, text="ICMP", variable=var, value="ICMP").grid(row=4, column=1)
tk.Radiobutton(window, text="UDP", variable=var, value="UDP").grid(row=4, column=2)
tk.Radiobutton(window, text="TCP", variable=var, value="TCP").grid(row=4, column=3)
# 配置结果显示
result = tk.StringVar()
tk.Label(window, textvariable=result).grid(row=6, column=0, columnspan=3)
# 发送报文按钮
tk.Button(window, text="发送报文", command=send_packet).grid(row=5, column=1)
# 启动GUI主循环
window.mainloop()