6

我已经捕获了三个不同的流作为带有元数据的 pcap 文件。如何流回 RTP/RTCP 流?

4

7 回答 7

11

如果我理解正确,你有 pcaps,但你想从他们那里得到 RTP?

Wireshark 用户界面

您可以使用 Wireshark 的 UI 通过菜单轻松地从 pcap 获取 RTP:电话/RTP/ 然后显示所有流...单击它列出的流,然后“分析”。

但是,如果您想自动执行此操作并避免使用 UI ......您可以使用 tshark。我在网上找到了几个教程,并使用它们构建了一个测试工具,该工具可以自动重建 pcap 上的音频/rtp,然后制作一个 wav 并将该 wav 上的音频转录为文本。

使用 Tshark 自动化

我正在打一个测试电话,想将录制的 pcap 转换为音频。为此,我从 pcap 中剥离了 RTP,然后将 rtp 文件转换为原始音频,然后再转换为 wav。

我通过命令行完成这一切,所以它可以自动化。所以我真的有一个shell脚本可以做到这一点:

tshark -a duration:20 -w /jenkins/userContent/sip_1call.pcap

上面记录了一个20秒的抓包(同时通话的持续时间),并将包输出为sip_1call.pcap

ssrc=$(tshark -n -r /jenkins/userContent/sip_1call.pcap -R rtp -T fields -e rtp.ssrc -Eseparator=, | sort -u | awk 'FNR ==1 {print}')

我将变量 ssrc 设置为使用 tshark 提取 rtp ssrc 值的操作。ssrc 是一个 RTP 流的标识符。如果您有一个流,那么您将有一个 RTP ssrc 值。您需要捕获所有 RTP.ssrc 并将它们输出到一个文件,这样很容易再次变成原始音频。

sudo tshark -n -r /jenkins/userContent/sip_1call.pcap -R rtp -R "rtp.ssrc == $ssrc" -T fields -e rtp.payload | tee payloads

在我的 shell 脚本的这一点上,我再次在记录的 pcap 上运行 tshark 并获取该 ssrc 值并说“将它们全部查找为'有效负载'”

for payload in `cat payloads`; do IFS=:; for byte in $payload; do printf "\\x$byte" >> /jenkins/userContent/sip_1call.raw; done; done

现在脚本将这些 RTP.ssrc 设置为输出文件,我正在调用 sip_1call.raw

出于我的目的,我还想将该原始文件转换为 wav,因此我使用了 sox:

sox -t raw -r 8000 -v 4 -c 1 -U /jenkins/userContent/sip_1call.raw /jenkins/userContent/sip_1call.wav

我在我的自动化框架中做了更多的事情(比如将音频转录为文本并与已知字符串进行比较)......但这超出了你的问题范围。

我希望这会有所帮助...

有关 SSRc 的更多信息:http ://en.wikipedia.org/wiki/Real-time_Transport_Protocol

有关我正在使用的完整 shell 脚本的更多详细信息:http: //www.continuous-qa.com/2013/04/automated-verification-of-voip-audio.html

于 2013-04-30T00:12:23.510 回答
2

您可以使用这个简单的免费工具重播所有捕获的数据包(包括 RTP)。

PlayCap - Wireshark 捕获的回放

PlayCap 截图

于 2013-07-18T18:51:35.863 回答
2

作为 SIPp sip 测试包的一部分,有一个专门用于此目的的工具。 http://sipp.sourceforge.net/doc/reference.html#PCAP+Play

(免责声明:我自己从未使用过它,虽然我确实使用过 SIPp 本身,并且非常喜欢它)

于 2011-06-19T15:41:25.763 回答
1

拿一个 pcap 并(我假设)重放它是一件很重要的事情;我知道没有任何软件包可以做到这一点。可以做到,但需要非常了解 SIP(​​我假设您使用的是 SIP)和 RTP。您还必须小心在正确的时间重播数据包,而不是尽可能快。

真正知道自己在做什么的人可以在 3-5 天内编写出这样的工具。

于 2011-06-04T07:33:31.937 回答
0

我也用这个把头撞在墙上一段时间......但是,我有一个解决方案。因此,首先,请确保您可以正确拨打软电话/电话……如果您可以使连接正常,那么其余的都还不错。

这是我的命令行:

sudo sipp -s [我的电话号码] [我的代理/软交换机的 ip] -sf /home/sipp-3.3/uac_pcap_g711.xml -m 2000 -mi [我的计算机发送负载的 ip] -d 1200 -trace_rtt -trace_err -stat_delimiter ,

所以我正在使用我自己的场景文件,但上面的参数应该适合你。这就是我对 SIPP 所做的事情:

须藤:为什么须藤?如果你不 sudo 这个,它不能创建发送音频/媒体所需的套接字。

mi: mi 指定您发送媒体的 IP... 我不需要指定端口。

d:我在暂停中增加了 1200 毫秒

trace_rtt 和 trace_err:我输出日志文件和性能报告

stat_delimiter:我更改默认值;至 ,

无论如何,这对我有用。

编辑:

另外,请注意,我以默认速率 (10CPS) 进行了 2000 次呼叫...您现在可能希望将其设为 -m 1 以便您可以验证它是否有效。它应该播放 pcap 音频,然后发送 DTMF。

在我完成这项工作后,我将这一切导入 Jenkins CI 并通过 Jenkins 作业调用 sipp,并将 csv 输出转换为可视图形,并在加载期间进行一些 tshark 捕获......全部通过 Jenkins......如果你重新感兴趣,请查看我的博客(在我的个人资料中提到)以了解有关如何设置这些内容的详细信息。

于 2013-04-01T21:38:09.123 回答
0

我如何流回 RTP/RTCP 流。

为了实现您的目标,有一个名为 rtpplay 的特定工具(免费):http ://www.cs.columbia.edu/irt/software/rtptools/

于 2012-01-18T09:17:09.340 回答
0

如果您只想重播/收听音频,您可以使用wireshark将RTP有效负载保存在原始音频文件中,然后您可以重新发送它(或使用音频编辑器收听),但如果您想重现确切的RTP/ RTCP流更复杂

于 2011-06-17T15:01:42.310 回答