自定义OpenVPN客户端不接收TLS ServerH

2024-06-28 10:21:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个简单的OpenVPN客户机(使用Python&Scapy&Scapy&ssl_tls] )它应该连接到OpenVPN服务器。在

我用Python打开udpsocket,用Scapy在UDP上定义我自己的OpenVPN层(根据OpenVPN规范),并在上面发送数据包(就像最初的客户端一样)。在

我能够成功地发送初始的P_CONTROL_HARD_RESET_CLIENT_V2消息并从服务器接收响应,即P_CONTROL_HARD_RESET_SERVER_V2,然后发送P_ACK_V1消息。在

请记住,我正确地生成了所有会话id。在

现在,当我发送第一条P_CONTROL_V1消息时,它本质上是OpenVPN层上的TLS ClientHello,我从服务器得到一个P_ACK_V1确认,但仅此而已。注意,这个确认并不意味着服务器收到了OpenVPN消息,不一定是TLS数据。我应该得到ServerHello和所有剩余的东西,但服务器在确认后不发送任何东西。在

http://i.stack.imgur.com/4RBSV.png

我将我发送的数据包的格式和所有网络层与真实客户端的通信(下图)进行了比较,几乎所有字段都是相同的。在

http://i.stack.imgur.com/OYTLU.png

当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中定义的一个层。在

你知道我为什么不叫服务器吗?在

编辑:考虑到我没有收到来自服务器的任何警报,我确信服务器出于某种原因甚至看不到我的ClientHello。


Tags: 服务器id消息客户端客户机定义tls数据包