feat(ICMP): 添加 ICMP 报文的 RTT 计算功能

- 实现了 ICMP 报文的发送和接收
- 添加了 RTT(往返时间)的计算和显示
- 增加了超时处理机制
This commit is contained in:
fly6516 2025-01-07 14:36:50 +08:00
parent 4c8d4db8fc
commit 2f202448f7

26
main.py
View File

@ -194,11 +194,33 @@ def send_packet():
src_port = 12345
dest_port = int(dest_port)
# 构造报文并发送
# ICMP报文需要添加 RTT 计算
if packet_type == "ICMP":
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
packet = construct_icmp()
elif packet_type == "UDP":
# 记录发送时间
start_time = time.time()
# 发送ICMP报文
sock.sendto(packet, (dest_ip, 0))
# 接收响应
sock.settimeout(2) # 设置超时为2秒
try:
sock.recvfrom(1024)
end_time = time.time()
rtt = (end_time - start_time) * 1000 # 毫秒
result.set(f"ICMP请求成功RTT: {rtt:.2f} 毫秒")
except socket.timeout:
result.set("ICMP请求超时")
finally:
sock.close()
return # 结束函数
# 对于其他报文类型UDP, TCP
if packet_type == "UDP":
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
packet = construct_udp(src_port, dest_port)
elif packet_type == "TCP":