【问题标题】:Strange flow DTMF capture on tcpdumptcpdump 上的奇怪流 DTMF 捕获
【发布时间】:2010-10-02 05:48:39
【问题描述】:

我捕获了一个 SIP 呼叫的 tcpdump 以调试 DTMF 问题(重复数字),但我在解释它时遇到了一些问题。

据我了解,当我通过 wireshark 的“VOIP CALL”解析捕获的流量时,我应该看到类似这样的内容(对于数字 123):

捕捉 1
RTP 电话事件 DTMF One 1
(活动结束)
RTP 电话事件 DTMF 二 2
(活动结束)
RTP 电话事件 DTMF 三 3
(活动结束)

但我看到的是这个
捕获 2
RTP 电话事件 DTMF One 1
RTP 电话事件 DTMF One 1
RTP 电话事件 DTMF One 1
(完)
RTP 电话事件 DTMF 二 2
RTP 电话事件 DTMF 二 2
RTP 电话事件 DTMF 二 2
(完)
RTP 电话事件 DTMF 二 3
RTP 电话事件 DTMF 二 3
RTP 电话事件 DTMF 二 3
(完)

在 1 个系统上,CAPTURE 2 被检测为 123,但在另一个系统上,它似乎将其解码为具有重复数字。 Wireshark 不将它们组合为单个 RTP 事件的原因是什么?

这是 rtp 流量:
捕获 1:

RTP 事件 DTMF 1
RTP 事件 DTMF 1
RTP 事件 DTMF 1(结束)
RTP 事件 DTMF 1(结束)
RTP 事件 DTMF 1(结束)
RTP 事件 DTMF 2
RTP 事件 DTMF 2
RTP 事件 DTMF 2(结束)
RTP 事件 DTMF 2(结束)
RTP 事件 DTMF 2(结束)
RTP 事件 DTMF 3
RTP 事件 DTMF 3
RTP 事件 DTMF 3(结束)
RTP 事件 DTMF 3(结束)
RTP 事件 DTMF 3(结束)
RTP 有效负载
...
...
...
RTP 有效负载

而 CAPTURE 2 是:
RTP 事件 DTMF 1
RTP 有效负载
RTP 事件 DTMF 1
RTP 有效负载
RTP 事件 DTMF 1(结束)
RTP 有效负载
RTP 事件 DTMF 1(结束)
RTP 有效负载
RTP 事件 DTMF 1(结束)
RTP 有效负载
RTP 有效负载
RTP 有效负载
RTP 有效负载
RTP 有效负载
RTP 事件 DTMF 2
RTP 有效负载
RTP 事件 DTMF 2
RTP 有效负载
RTP 事件 DTMF 2(结束)
RTP 有效负载
RTP 事件 DTMF 2(结束)
RTP 有效负载
RTP 事件 DTMF 2(结束)
RTP 有效负载
RTP 有效负载
RTP 有效负载
RTP 有效负载
RTP 事件 DTMF 3
RTP 有效负载
RTP 事件 DTMF 3
RTP 有效负载
RTP 事件 DTMF 3(结束)
RTP 有效负载
RTP 事件 DTMF 3(结束)
RTP 有效负载
RTP 事件 DTMF 3(结束)
RTP 有效负载
RTP 有效负载
RTP 有效负载
RTP 有效负载
RTP 有效负载
RTP 有效负载

CAPTURE 2 是否遵循 RFC2833?

【问题讨论】:

    标签: sip rtp dtmf


    【解决方案1】:

    实际上,规范鼓励您冗余传输 RTP Event 数据包,因为可能会丢失数据包,并且他们建议至少发送 3 次。检查每个重复事件的开始和结束时间。如果您需要扩展事件(按键仍然按住,比您想在一个事件中编码的时间长等),那么您可以在不结束的情况下扩展它。

    这也是 End 数据包被发送 3 次的原因。 (见section 3.6 of RFC 2833)。

    【讨论】:

      【解决方案2】:

      RFC 2833“事件”完全有可能被编码为多个 RTP 数据包。 3.6 节告诉我们

      如果事件持续时间超过 一个时期,源产生 事件应该发送一个新的事件包 带有 RTP 时间戳值 对应于开头 事件和事件的持续时间 相应增加。

      RFC 将“一个周期”定义为 50 毫秒。

      所以

      RTP 事件 DTMF 1
      RTP 事件 DTMF 1
      RTP 事件 DTMF 1(结束)

      表示我们有人按下 1 键大约 150 毫秒。

      【讨论】:

      • 谢谢,您知道这是否会导致其他系统将其解释为重复数字?
      • 他们不应该:最后一个数据包应该设置其 E 位,表示事件的结束。
      • @FrankShearar 说得好,弗兰克......但我有问题要问你......我正在尝试从 RTP 数据包中检测 cisco ph 的 DTMF 模式......我所做的是我检查有效负载类型....然后我检查 dtmfeventend 是否为 1,如果为 1,则将 DTMF 事件值的值添加到名为“tobematchpattern”的本地变量中......并等待下一个 dtmfeventend 但如果模式为匹配的可以说是 111 或 222 .... 如果要匹配的模式是 123 或 456 我的意思是区分数字,则此方法有效
      • 假设有人在“111”的第 2 位按住 1 键约 100 毫秒,但在第 1 位和第 3 位只有 50 毫秒。我希望看到类似“RTP EVENT DTMF 1(结束)”“RTP EVENT DTMF 1”“RTP EVENT DTMF 1(结束)”“RTP EVENT DTMF 1(结束)”的数据包。但可以肯定的是,在编写代码检测之前,我会使用数据包检查器来查看设备发送的具体内容。
      • 您会看到 jesup 在他的回答中描述的内容 - 发送冗余数据包。查看数据包的开始/结束时间。 (恐怕我没时间再帮你了。)
      猜你喜欢
      • 2013-12-03
      • 1970-01-01
      • 2013-05-29
      • 2012-05-05
      • 2012-07-26
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 2011-03-16
      相关资源
      最近更新 更多