如何将RTP数据包与其余数据分开

时间:2011-12-12 12:51:54

标签: c++ c linux libpcap

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

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

    P.S。编辑注意这是为Wireshark。感谢评论员指出这一点!

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

  

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

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