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]
关注
打赏