从套接字数据事件nodejs中获取字节

时间:2019-03-08 14:19:12

标签: node.js sockets ssl tcp tls1.2

我有一个奇怪的问题

我一直在尝试实现自己的tls实现,以便能够连接到不100%兼容TLSv1.2规范的服务器(client_random和server_random不是随机的,而是从时间戳生成的,服务器强制客户端使记录层版本为tls 1.2来执行握手)

最重要的是,在开始tls握手之前,我需要以类似于http而不是http(sts / 1.0)的协议在clearText中发送一些数据

所以我将两者的实现结合在一起,但是遇到了我不知道会发生的事情

当通过tls握手接收服务器的证书时,我在Buffer.from(data, "ascii")创建的缓冲区中看到的字节(是,套接字编码也为ascii)(并且我也尝试了utf-8编码) not是我在Wireshark中看到的,并且导致我的x509解析器失败(如果我通过从Wireshark证书的复制粘贴的十六进制流创建缓冲区,则可以正常工作)。我相信这是一个编码问题,但是我可以使用哪种编码来获取data中的原始字节而不必对其进行编码?

示例:

wirekark中证书消息的开头:

16:03:03:03:52:0b:00:03:4e:00:03:4b

以ascii编码的nodejs中的证书消息开头:

16:03:03:00:2a:02:00:00:26:03:03:12

使用的套接字是net.Socket的套接字

在撰写本文以解决此问题时,我的计划是让低级语言充当代理,接收原始字节,创建这些字节的ascii表示形式,然后将其发送到我的nodejs套接字。根本不是最好的解决方案,但这就是我自己能找到的全部。

PS:如果有人知道可以接受特定client_random的nodejs tls实现和/或在握手期间将tls记录层版本强制为1.2,那么您将节省数十小时的开发所需的一切。

PS2:我试图在nodejs上寻找“原始” tcp套接字,以对收到的数据进行更多控制,并且有一个“原始套接字” npm程序包。但是从我看到的结果来看,无法在服务器上设置要连接的端口。如果有人以前使用过此程序包,并且知道如何在该程序包下的tcp套接字中设置端口,我想了解您的操作方式。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我使用python代理向我发送这些字节的ascii表示,并且一切正常。我很沮丧,无法在无需执行该死的.node

的情况下找到在Node中执行此操作的方法