Networking 验证SIP(会话启动协议)

Networking 验证SIP(会话启动协议),networking,sip,Networking,Sip,在SIP情况下,验证UDP有效负载的机制/方法是什么?SIP消息不包含头或正文的大小,因此如何验证有效负载是否有效?相反,RTP表示大小,因此给定UDP报头的长度值,就可以检查RTP的有效性和完整性。SIP可以做类似的事情吗 标记。你的问题有两部分: 如何验证SIP头?验证SIP头的唯一方法是根据规则解析它们。有许多不同语言可用的SIP解析器 如何验证SIP消息体?SIP中内置了一种机制:Content Length头指定了消息体的大小。在一般情况下,主体可以包含任意MIME类型,并且不适用进一

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


标记。

你的问题有两部分:

  • 如何验证SIP头?验证SIP头的唯一方法是根据规则解析它们。有许多不同语言可用的SIP解析器

  • 如何验证SIP消息体?SIP中内置了一种机制:
    Content Length
    头指定了消息体的大小。在一般情况下,主体可以包含任意MIME类型,并且不适用进一步的验证规则


  • 编辑:根据下面Frank Shearr的评论,通过UDP传输的SIP消息不需要
    内容长度。但如果您的UA支持,您可以利用它。

    谢谢您的评论。然而,首先我应该理解如何在不解析整个SIP消息的情况下验证SIP作为UDP有效负载是否有效——在解析90%的消息后,它可能看起来是无效的。所以我想知道是否有一个快速的“测试”来决定进一步的深度解析。好的,UDP支持通过校验和进行完整性验证,所以如果发送方填充校验和字段,这可能是一个快速测试。UDP数据报中的SIP消息不需要
    内容长度
    ;如果不存在,则假定数据报的其余部分是正文。@标记Opensips所做的(或在2.0之前做的,我现在不确定)是延迟分割逻辑行,并确保它们是“Header:value”格式。然后在访问特定的头时,从顶部解析(头,值)对的列表,直到找到正确的一个为止。仅当您请求详细信息时,才会解析值本身-例如“To:1@y.com在您明确请求“收件人”域之前,“收件人”仅作为文本提供。它很快,但您必须假设您可以在任何时候获得“这甚至不是有效消息”异常。