【问题标题】:Is it possible to start a TCP socket connection without a handshake?是否可以在不握手的情况下启动 TCP 套接字连接?
【发布时间】:2016-06-29 00:10:31
【问题描述】:

我正在制作一个 SSL 服务器,并且我不使用 python 的库,因为我想对这个过程进行一些非正统的更改。因此,我不能简单地启动 TCP 连接,因为我需要通过握手传输加密细节,而我无法通过套接字进行。所以我使用 scapy 自己进行握手,但之后我想继续使用 TCP 套接字,而无需再次进行握手过程。这可能吗?

【问题讨论】:

    标签: python sockets tcp scapy


    【解决方案1】:

    如果我正确理解您的问题,您使用 scapy 交换了几个片段,现在想用它们制造一个普通的成熟插座。

    这并不容易:出于所有实际目的,您的 TCP 不会注意到您在数据包中发送的任何内容,并且它不会为此 TCP 连接保留任何状态:所有状态都在您的应用程序中。

    也就是说,在 Linux 中有一个叫做 TCP_REPAIR 的东西可以让您将套接字置于给定状态。

    使用此选项时,套接字将切换到特殊模式,在 对其执行的任何操作都不会导致任何定义的 通过适当的协议操作,而是直接将 socket 进入一个状态,在这个状态下,socket 应该在最后 成功完成的操作

    如果您正确设置序列号,套接字应该“正常工作”。,

    还需要恢复 TCP 序列号。为此, 引入了 TCP_REPAIR_QUEUE 和 TCP_QUEUE_SEQ 选项。

    当然,所有这些都是现代 Linux 特有的;其他操作系统可能有也可能没有类似的机制。

    【讨论】:

    • 谢谢。我不运行 Linux,在我执行握手后是否有可能将套接字从 UDP 转换为 TCP?另外,我听说过“原始套接字”。是否可以一直使用它?我还没有读过关于原始套接字的文章,但如果你碰巧知道使用这种方法是可能的,那么我会研究它们。
    • @jep_macca “是否有可能将套接字从 UDP 转换为 TCP” 绝对不是。原始套接字在这里对您没有帮助:根据定义,原始套接字没有传输级语义。
    • 非常感谢您提供的所有帮助。我会为 Windows 寻找 TCP_REPAIR,希望有这样的东西。使用 UDP 连接和超时进行 TCP 连接会很烦人。
    猜你喜欢
    • 2020-04-03
    • 2017-11-23
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2019-04-27
    • 2011-11-08
    • 2016-07-13
    相关资源
    最近更新 更多