如何判定是stun协议

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判定是stun协议相关的知识,希望对你有一定的参考价值。

STUN 全称:(Session Traversal Utilities for NAT)NAT会话穿越应用程序,允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间创建UDP通信。协议由RFC 5389定义。

1、stun 消息的魔术cookie

//fixed value 0x2112A442
const uint8_t stun_packet::magic_cookie[] = 0x21, 0x12, 0xA4, 0x42 ;

四个字节,和RTP协议类似,不过更多,有四个,分别是0x21,0x12, 0xA4, 0x42
根据RFC 5389,协议头部如下所示:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |0 0|     STUN Message Type     |         Message Length        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Magic Cookie                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  |                     Transaction ID (96 bits)                  |
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2、如何判断

bool is_stun_pack(const uint8_t* data, size_t len) 
    if ((len >= STUN_HEADER_SIZE) && (data[0] < 3) &&
        (data[4] == 0x21) && (data[5] == 0x12) &&
        (data[6] == 0xA4) && (data[7] == 0x42)) 
        return true;
     
    return false;

以上是关于如何判定是stun协议的主要内容,如果未能解决你的问题,请参考以下文章

stun server安装与使用

STUN和TURN协议解析

STUN, TURN, ICE介绍

TR111与STUN

Janus的STUN原理与抓包分析

Janus的STUN原理与抓包分析