【问题标题】:Network and Transport layer functionalities on Captured packets捕获数据包的网络和传输层功能
【发布时间】:2018-07-01 02:59:55
【问题描述】:

我有一个客户端和服务器程序在 TCP 上通信,在应用层实现 IEC-60870-5-104 协议。我正在嗅探他们之间所有流量的副本, 如何在 C 中从 libpcap 嗅探的数据包上准确复制 IP 和 TCP 层功能?像 IP 重组、管理 无序 段、重新传输重复 TCP 段和分离 PDU,这样我得到的数据包就好像我在服务器的应用层上嗅探一样。 (也请建议任何有助于做到这一点的框架)。

【问题讨论】:

    标签: linux network-programming tcp-ip libpcap packet-capture


    【解决方案1】:

    这是一项非常困难和复杂的任务。这就是网络入侵检测/深度数据包检测系统所做的事情,AFAIK 没有处理它的插件库。

    您最好的选择是建立在已经进行会话跟踪、状态管理、重新组装、重新排序、重复检测等的现有系统上,例如 Bro 或 Suricata(或者可能是wireshark 内部)。您可以然后添加您自己的应用层解码,以对提供的重新组装的数据流进行操作。

    【讨论】:

    • 感谢您的快速回复。在 IEC-60870-5-104 协议中,帧大小不能超过 256 字节,这意味着 PDU 大小将小于或等于 256 个八位字节。在服务器端程序中,我使用一个 send() 语句来发送一个 IEC-104 帧。同样,如果我使用三个连续的 send() 语句,它们之间没有任何延迟,所有三个帧将被打包到一个 TCP 段中,因此捕获的数据包将有多个帧。有什么办法可以将它们分开(Wireshark 能够识别每一帧,它是怎么做的)
    • TCP 将如何指示帧 (PDU) 是否被拆分并使用两个 TCP 段发送
    • TCP 不会表明这一点。 TCP 提供逻辑字节流。由应用程序层将其拆分为消息/PDUs/帧,或者应用程序想要查看流。因此,您的应用层解析器必须能够识别 IEC“帧”并相应地处理它们。
    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多