【发布时间】:2016-06-29 00:10:31
【问题描述】:
我正在制作一个 SSL 服务器,并且我不使用 python 的库,因为我想对这个过程进行一些非正统的更改。因此,我不能简单地启动 TCP 连接,因为我需要通过握手传输加密细节,而我无法通过套接字进行。所以我使用 scapy 自己进行握手,但之后我想继续使用 TCP 套接字,而无需再次进行握手过程。这可能吗?
【问题讨论】:
我正在制作一个 SSL 服务器,并且我不使用 python 的库,因为我想对这个过程进行一些非正统的更改。因此,我不能简单地启动 TCP 连接,因为我需要通过握手传输加密细节,而我无法通过套接字进行。所以我使用 scapy 自己进行握手,但之后我想继续使用 TCP 套接字,而无需再次进行握手过程。这可能吗?
【问题讨论】:
如果我正确理解您的问题,您使用 scapy 交换了几个片段,现在想用它们制造一个普通的成熟插座。
这并不容易:出于所有实际目的,您的 TCP 不会注意到您在数据包中发送的任何内容,并且它不会为此 TCP 连接保留任何状态:所有状态都在您的应用程序中。
也就是说,在 Linux 中有一个叫做 TCP_REPAIR 的东西可以让您将套接字置于给定状态。
使用此选项时,套接字将切换到特殊模式,在 对其执行的任何操作都不会导致任何定义的 通过适当的协议操作,而是直接将 socket 进入一个状态,在这个状态下,socket 应该在最后 成功完成的操作。
如果您正确设置序列号,套接字应该“正常工作”。,
还需要恢复 TCP 序列号。为此, 引入了 TCP_REPAIR_QUEUE 和 TCP_QUEUE_SEQ 选项。
当然,所有这些都是现代 Linux 特有的;其他操作系统可能有也可能没有类似的机制。
【讨论】: