我正在编写一个简单的 OpenVPN 客户端(使用 Python & Scapy & [scapy-ssl_tls] ) 应该连接到 OpenVPN 服务器。
我在 Python 中打开 UDP 套接字并使用 Scapy 在 UDP 之上定义我自己的 OpenVPN 层(根据 OpenVPN 规范)并在其上发送数据包(就像原始客户端一样)。
我能够成功发送初始 P_CONTROL_HARD_RESET_CLIENT_V2
消息并从服务器接收响应,即 P_CONTROL_HARD_RESET_SERVER_V2
,然后我发送 P_ACK_V1
消息。
请记住,我正确生成了所有 session ID。
现在,当我发送第一个 P_CONTROL_V1
消息(本质上是 OpenVPN 层顶部的 TLS ClientHello)时,我从服务器收到了一个 P_ACK_V1
确认,仅此而已。请注意,此 ACK 仅表示服务器收到了 OpenVPN 消息,不一定是 TLS 数据。我应该得到 ServerHello 和所有剩余的东西,但服务器在 ACK 之后没有发送任何东西。
我将发送的数据包的数据包格式和所有网络层与真实客户端的通信(下图)进行了比较,几乎所有字段都是相同的。
Wireshark 在完成握手后会自动组合和组装数据包,因此比较它并不难。
我还尝试重播来自之前真实客户端通信的完整 ClientHello 消息(虽然我生成了自己的本地时间)但结果是相同的 - ACK 然后什么都没有。
我还检查了服务器日志,没有发现任何错误或任何可以帮助我的东西。
我这样创建我的 TLS 数据包(有更多选项):
pack = openvpn(opcode=0x20, session_id=ses, message_packet_id_array_length=0, message_packet_id=0000)/TLSRecord()/TLSHandshake()/TLSClientHello()
openvpn
是我在 Scapy 中自己定义的层。
为什么我没有得到 ServerHello 有什么想法吗?
编辑:考虑到我没有从服务器收到任何警报,我很确定服务器出于某种原因甚至没有看到我的 ClientHello。
最佳答案
关于python - 自定义 OpenVPN 客户端不接收 TLS ServerHello,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873869/