我一直在含泪学习网络编程的概念。我从一个简单的 UDP 客户端/服务器对开始,转移到 TCP,然后使用 TLS 成功保护 TCP 流。现在我正在尝试“打败最终的老板”,并使用 DTLS 保护 UDP 通信。
我使用 DTLS 组合了一个非常简单的 UDP 客户端/服务器对,以尝试并成功地交换加密通信。让我将问题分解为客户端和服务器。
DTLS 客户端
import socket
import ssl
from dtls import do_patch
do_patch()
serverAddress, serverPort = "IP Address", 12345
addr = (serverAddress, serverPort)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
SSLSocket = ssl.wrap_socket(s, '.\key.pem', '\cert.pem', server_side=False)
SSLSocket.connect(addr)
clientMessage = bytes(('I am the UDP client').encode('utf-8'))
SSLSocket.send(clientMessage)
Client Hello
使用DTLS协议在Wireshark中成功看到
DTLS 服务器
import ssl
from socket import socket, AF_INET, SOCK_DGRAM
from dtls import do_patch
do_patch()
##### Server and Socket Parameters #####
serverAddress, serverPort = "192.168.1.158", 12345
addr = (serverAddress, serverPort)
s = socket(AF_INET, SOCK_DGRAM)
sock = ssl.wrap_socket(s, '.\key.pem', '.\cert.pem', server_side=True)
sock.bind(addr)
sock.listen(2)
clientSocket, addr = sock.accept()
print("Connection established")
服务端程序运行成功,但是客户端好像连接不上。服务器从不确认
Client Hello
,这反映在客户端定期重新传输其问候消息。
在
Print()
之后,我无法在服务器中获得sock.listen(2)
语句。我不是 100% 确定这意味着什么。服务器正在监听和等待,Print()
语句未执行,或者其他不会导致运行时错误的东西。
无论如何,
sock.accept()
永远无法到达,并且客户端永远无法发送 Hello 消息。我不确定问题是什么,非常感谢对此事的一些反馈。