【问题标题】:How separate RTP packets from the rest如何将 RTP 数据包与其他数据包分开
【发布时间】:2011-12-12 12:51:53
【问题描述】:

我有一个带有 voip 会话的 pcap 文件,我如何将 RTP 数据包与其他数据包分开?

我可以获取 sip 数据包,但我无法区分 RTP 数据包与其他数据包。

【问题讨论】:

    标签: c++ c linux libpcap


    【解决方案1】:

    在您的文件中搜索 RFC3550 中定义的 RTP 标头。或者更好地使用 pcap-filter,例如 this wiki(寻找“问:什么是仅捕获 SIP 和 RTP 数据包的好过滤器?”)。

    【讨论】:

    • +1 用于过滤,-1 用于检查 RTP 标头(这是不现实的,并且是为不同目的而设计的),所以 = 0 :)
    • 但是,该 RTP 过滤器会过滤 RTP 标头。如果你想要这个可靠,你必须解析 SIP 或任何正在使用的呼叫控制协议,提取 RTP 信息 - SIP 内的 SDP 将传达用于 RTP 的地址和端口,并在期间查找与这些值匹配的数据包通话(这意味着您还需要一个基本的通话状态机来跟踪通话)
    【解决方案2】:

    如果你想在wireshark中查看RTP流量,那么:

    1. 选择分析->显示过滤器...
    2. 选择“UDP”,确定
    3. 右键单击任何 UDP 数据包并选择“解码为...”
    4. 从列表中选择“RTP”,OK
    5. 现在您可以看到所有 RTP 数据包。

    希望对您有所帮助。 :)

    附言编辑指出这是针对 Wireshark 的。感谢评论者指出这一点!

    【讨论】:

    • 当问题根本没有提到任何应用程序时,您似乎向特定应用程序发出指令。
    • 感谢您指出这一点。编辑以确保这一点清晰。
    【解决方案3】:

    查看@macs 关于 PCap 过滤器的建议。如果这不能满足您的需求(例如,您需要过滤掉特定 SIP 会话的 RTP 数据包),则没有简单的方法。您需要解析 SIP 消息,检索 RTP 端口号,在特定时间段内接收进出这些端口的数据包,并且(可选)通过检查它们的标头(标头中的magic number)来检查这些数据包是否是 RTP

    【讨论】:

      【解决方案4】:

      从 pcap 文件中提取 RTP/RTCP 数据包的开源软件是:

      您可以从源代码中查看和了解所使用的方法。

      我可以获取 sip 数据包,但我无法区分 RTP 数据包 其余的。

      如果您能够解码 SIP,那么您可以找到(在 INVITE 消息中)SDP 消息。如果您对其进行解码,您可以找到 RTP“流”的 IP 和端口(以及 RTCP => 端口 + 1)。通过这些信息,您可以唯一地识别 RTP 和 RTCP 数据包。请记住,通常有 STUN 协议的包(具有相同的 IP-PORT)必须与 RTP 分开。 您必须考虑数据包捕获在哪里(网络上下文和约束),您可以考虑 NAT。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-08
        • 2013-03-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多