feat(main): 添加 IP 报文发送功能
- 实现了 IP 报文的构造和发送- 添加了 IP 选项的界面按钮 - 优化了代码结构,为未来可能的报文类型扩展做准备
This commit is contained in:
parent
fdcc058c40
commit
773858452e
20
main.py
20
main.py
@ -277,7 +277,7 @@ def send_packet():
|
||||
|
||||
return # 结束函数
|
||||
|
||||
# 对于其他报文类型(UDP, TCP, DNS)
|
||||
# 对于其他报文类型(UDP, TCP, DNS, IP)
|
||||
if packet_type == "UDP":
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
packet = construct_udp(src_port, dest_port)
|
||||
@ -303,6 +303,21 @@ def send_packet():
|
||||
result.set("DNS解析失败")
|
||||
sock.close()
|
||||
return # 结束函数
|
||||
elif packet_type == "IP": # 添加IP报文类型处理
|
||||
# 构造IP头部
|
||||
payload = b"Hello, IP!" # 示例负载数据
|
||||
ip_header = construct_ip_header(src_ip, dest_ip, len(payload), socket.IPPROTO_RAW)
|
||||
packet = ip_header + payload
|
||||
|
||||
# 创建原始套接字
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
|
||||
sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) # 告诉内核IP头部已包含在数据包中
|
||||
|
||||
# 发送IP报文
|
||||
sock.sendto(packet, (dest_ip, 0))
|
||||
result.set(f"IP报文发送成功!")
|
||||
sock.close()
|
||||
return # 结束函数
|
||||
|
||||
# 发送报文
|
||||
sock.sendto(packet, (dest_ip, dest_port))
|
||||
@ -351,7 +366,8 @@ 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)
|
||||
tk.Radiobutton(window, text="DNS", variable=var, value="DNS").grid(row=4, column=4) # 添加DNS选项
|
||||
tk.Radiobutton(window, text="DNS", variable=var, value="DNS").grid(row=4, column=4)
|
||||
tk.Radiobutton(window, text="IP", variable=var, value="IP").grid(row=4, column=5) # 添加IP选项
|
||||
|
||||
# 配置结果显示
|
||||
result = tk.StringVar()
|
||||
|
Loading…
Reference in New Issue
Block a user