我已经捕获了三个不同的流作为带有元数据的pcap文件。如何流回RTP / RTCP流?
答案 0 :(得分:9)
如果我理解正确,你有pcaps,但你想从他们那里获得RTP?
Wireshark UI
您可以使用Wireshark的UI通过菜单轻松地从pcap获取RTP:Telephony / RTP /然后显示所有流...单击它列出的流,然后“分析”。
但是,如果你想自动化这个,并避免使用UI ......你可以使用tshark。我在网上发现了几个教程并用它们构建了一个测试工具,可以自动重建pcap上的audio / rtp,然后制作一个wav并将该wav上的音频转录成文本。
使用Tshark自动
我正在进行测试呼叫,并希望将录制的pcap转换为音频。为此,我将RTP从pcap中剥离出来,然后将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
答案 1 :(得分:1)
拿一个pcap和(我假设)重播它是一件非常重要的事情;我知道没有包可以做到这一点。它可以完成,但需要非常好的知识SIP(我假设您正在使用SIP)和RTP。您还必须小心在正确的时间重播数据包,而不是尽可能快。
真正知道自己在做什么的人可以在3-5天内编写这样的工具。
答案 2 :(得分:1)
作为SIPp sip测试包的一部分,有一个专门用于此目的的工具。 http://sipp.sourceforge.net/doc/reference.html#PCAP+Play
(免责声明:我自己从未使用过它,虽然我确实使用过SIPp,并且非常喜欢它)
答案 3 :(得分:1)
答案 4 :(得分:0)
如果您只想重播/收听音频,可以使用wireshark将RTP有效负载保存在原始音频文件中,然后您可以重新发送(或使用音频编辑器收听),但如果您想重现确切的RTP / RTCP流更复杂
答案 5 :(得分:0)
如何流回RTP / RTCP流。
要实现目标,有一个名为rtpplay的特定工具(免费):http://www.cs.columbia.edu/irt/software/rtptools/
答案 6 :(得分:0)
我把头撞在墙上已经有一段时间了......但是,我得到了一个解决方案。首先,请确保您可以正确地拨打软电话/电话...如果您可以将该连接设置得很好,那么剩下的就不那么糟了。
这是我的命令行:
sudo sipp -s [我的电话号码] [ip of my proxy / softswitch] -sf /home/sipp-3.3/uac_pcap_g711.xml -m 2000 -mi [ip of my computer send the load] - d 1200 -trace_rtt -trace_err -stat_delimiter,
所以我使用自己的方案文件,但上面的参数应该可以正常使用。这就是我正在用SIPP做的事情:
sudo:为什么是sudo?如果你不这样做,它就无法创建发送音频/媒体所需的套接字。mi:mi指定发送媒体的IP ...我不需要指定端口。
d:我在暂停时添加了1200毫秒
trace_rtt和trace_err:我输出日志文件和性能报告
stat_delimiter:我改变默认值;到,
无论如何这对我有用。
编辑:
另外,请注意我有2000个调用,默认速率(10CPS)...您可能想要现在制作-m 1,以便您可以验证它是否有效。它应播放pcap音频,然后发送DTMF。
在我完成这项工作之后,我在Jenkins CI中导入了所有内容并通过Jenkins作业调用sipp,并将csv输出转换为可视图形,并在加载期间执行一些tshark捕获...所有都通过Jenkins ...如果您有兴趣,请查看我的博客(在我的个人资料中提到),了解如何设置这些内容的详细信息。