DDOS防护 AAD-开发示例:计算报文的水印值示例代码

时间:2024-11-22 11:25:10

计算报文的水印值示例代码

计算水印信息结构如图1所示。

图1 计算水印信息结构图
  • 水印数据结构定义如下代码所示
typedef struct {
    unsigned int   userId;    /* 用户标识ID */
    unsigned int   payload;   /* 业务载荷 */
    unsigned short destPort;  /* 业务目的端口 */
    unsigned short rsv;       /* 保留字段,2字节填充 */
    unsigned int   destIp;    /* 业务目的IP */
    unsigned int   key;       /* 水印关键字 */
} UdpWatermarkInfo;
  • 字节序需要使用网络序。
  • 业务载荷不满4字节的,使用0进行填充。
  • 计算CRC哈希值可以使用CPU硬件加速接口进行替换,以提升处理性能。
unsigned int UdpFloodWatermarkHashGet(unsigned int userId, unsigned int payload, unsigned short destPort, unsigned int destIp, unsigned int key)
{
    UdpWatermarkInfo stWaterInfo;

    stWaterInfo.destIp   = destIp;
    stWaterInfo.destPort = destPort;
    stWaterInfo.userId   = userId;
    stWaterInfo.payload  = payload;
    stWaterInfo.key      = key;
    stWaterInfo.rsv      = 0;

    return CRC32Hash(0, (UCHAR *)&stWaterInfo, sizeof(stWaterInfo));
}
support.huaweicloud.com/productdesc-aad/aad_01_0890.html