我在本地主机上的服务器和客户端之间进行UDP通信 根据此代码: https://pymotw.com/2/socket/udp.html
回声服务器:
import socket
import sys
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('127.0.0.1', 12321)
sock.bind(server_address)
while True:
data, address = sock.recvfrom(4096)
if data:
sent = sock.sendto(data, address)
echo客户端
import socket
import sys
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('127.0.0.1', 12321)
message = 'This is the message. It will be repeated.'
try:
for i in range 4:
sent = sock.sendto(message, server_address)
data, server = sock.recvfrom(4096)
finally:
sock.close()
现在让我们说我受到了MITM的攻击,并且特定的数据包没有到达服务器,并且客户端仍在等待服务器的响应,
我陷入僵局。
我该如何克服? UDP套接字有一些超时参数吗?
答案 0 :(得分:1)
是的,UDP套接字超时。请参见https://docs.python.org/2/library/socket.html中的socket.settimeout()并大致阅读非阻塞套接字。
请注意,即使没有中间人攻击者,也可以丢弃,复制和/或重新排序UDP数据包。这是因为(根据设计)UDP是不可靠的数据报协议。
如果您需要可靠的协议,请使用TCP(或QUIC)。
如果您需要确保中间人不能修改或(可选)观察数据,请使用TLS(或QUIC)。