【问题标题】:validate SIP (Session Initiation Protocol)验证 SIP(​​会话发起协议)
【发布时间】:2013-04-01 20:35:35
【问题描述】:

在 SIP 的情况下验证 UDP 有效负载的机制/方法是什么? SIP消息不包含header或body的大小,那么如何验证payload是否有效?相反,RTP 指示大小,因此给定 UDP 标头的长度值,可以检查 RTP 的有效性和完整性。可以为 SIP 做类似的事情吗?

标记。

【问题讨论】:

    标签: networking sip


    【解决方案1】:

    您的问题分为两部分:

    1. 如何验证 SIP 标头? 验证 SIP 标头的唯一方法是根据 section 7.3.1 of RFC 3261 的规则解析它们。有许多不同语言可用的 SIP 解析器。

    2. 如何验证 SIP 消息的正文? SIP 内置了一种机制:Content-Length 标头指定正文的大小。在一般情况下,正文可以包含任意 MIME 类型,并且不需要进一步的验证规则。

    编辑:根据 Frank Shearar 在下面的评论,通过 UDP 传输的 SIP 消息不需要Content-Length。但如果你的 UA 支持它,你可以利用它。

    【讨论】:

    • 感谢您的评论。但是首先我应该了解如何在不解析整个 SIP 消息的情况下验证作为 UDP 有效负载的 SIP 是否有效——在解析 90% 的消息后它可能看起来是无效的。所以我想知道是否有一个快速的“测试”来决定进一步深度解析。
    • 嗯,UDP 支持通过校验和验证完整性,所以如果发送方填写校验和字段,这可能是一个快速测试。
    • UDP数据报中的SIP消息不需要Content-Length;如果不存在,则假定数据报的其余部分是正文。
    • @Mark Opensips 所做的(或在 2.0 之前所做的,我现在不确定)是懒惰地拆分逻辑行并确保它们采用“标题:值”格式。然后在访问特定标头时,(标头,值)对的列表从顶部开始解析,直到您找到正确的。只有在您请求详细信息时才会解析值本身 - 例如,“To: 1@y.com”只能作为文本使用,直到您特别请求“To”域。它很快,但你必须假设你可以在任何时候得到“这甚至不是一个有效的消息”异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多