如何将RTP包与其他包分开
How separate RTP packets from the rest
我得到了一个带有voip会话的pcap文件,我如何将RTP数据包与其他数据包分开?
我可以获得sip数据包,但是我无法区分RTP数据包和其他数据包。
在您的文件中搜索RFC3550中定义的RTP头。或者更好地使用pcap-filter,例如这个wiki(查找"Q:什么是只捕获SIP和RTP数据包的好过滤器?")。
如果您想查看wireshark中的RTP流量,则:
- 选择Analyze->Display Filters…
- 选择"UDP",OK 右键单击任何UDP数据包并选择"Decode as…"
- 从列表中选择"RTP",OK 现在你可以看到所有的RTP包。
希望有帮助。:)
注。编辑说明,这是为Wireshark。感谢一位评论者指出这一点!
查看@mac关于PCap过滤器的建议。如果这不能满足您的需求(例如,您需要过滤掉特定SIP会话的RTP数据包),没有简单的方法。您需要解析SIP消息,检索RTP端口号,获取在特定时间段内进出这些端口的数据包,并(可选地)通过检查其报头(报头中的magic number
)检查这些数据包是否为RTP
从pcap文件中提取RTP/RTCP数据包的开源软件是:
- rtpbreak: http://dallachiesa.com/code/rtpbreak/doc/rtpbreak_en.html
- xplico: http://www.xplico.org
从源代码中,您可以查看并理解所使用的方法。
我可以获得sip数据包,但我无法区分RTP数据包从其余的
如果您能够解码SIP,那么您可以找到(在INVITE消息中)SDP消息。如果你解码它,你可以找到RTP"流"的IP和端口(RTCP => PORT + 1)。有了这些信息,你可以唯一地识别RTP和RTCP数据包。请记住,通常有一些包(具有相同的IP-PORT)使用STUN协议,必须与RTP分开。您必须考虑数据包捕获在哪里(网络上下文和约束),您可以考虑NAT。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- GlobalAlloc而不是其他分配方法
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 结构和双指针隐藏在其他结构中,多层混淆
- UE4在OnComponentBeginOverlap上铸造其他actor
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- 保留对其他类的成员函数的引用
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 具有包含其他对象的类的对象创建顺序
- 如何将RTP包与其他包分开