我正在通过 netcat 测试我的 openvpn 服务器,发现了这个答案: 如何在不使用 OpenVPN 客户端的情况下检查 OpenVPN 服务器是否正在监听远程端口?
通过发送一个魔术字符串“\x38\x01\x00\x00\x00\x00\x00\x00\x00\x00”它运行良好,但我想知道这个字符串的含义是什么?
答案1
它只是 OpenVPN 协议的一部分,表示一些初始化指令。要了解确切的解码含义,您可能需要查看 OpenVPN 源代码才能确切了解它的含义。
答案2
这个问题很老了,但在谷歌搜索 magic string 时仍然是最热门的答案。我也觉得 magic string 很烦人,所以在深入研究了 openvpn 源代码后,你可以看到 0x38 是操作码P_CONTROL_HARD_RESET_CLIENT_V2
(参见第一个字节描述和操作码值在 openvpn repo 中)
数据包的其余 8 个字节只是会话 ID,对于真实连接来说,它看起来是一个随机数,但在示例字符串中是一个硬编码的 0x01000000000000000,它导致 openvpn 服务器中的日志如下所示:
TLS: Initial packet from [AF_INET]:x.y.z.zz:53832, sid=01000000 00000000
您可以看到类似的数据包用于openvpn 单元测试: