如何判定是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协议的主要内容,如果未能解决你的问题,请参考以下文章