suricata7.0使用dpdk解析dns流程和函数调用栈
时间: 2023-08-08 16:05:47 浏览: 93
Suricata 7.0 使用 DPDK 解析 DNS 的流程和函数调用栈如下:
1. Suricata 在初始化时会调用 `DnsInit()` 函数进行 DNS 模块的初始化。
2. 当有 DNS 流量需要处理时,Suricata 会调用 `DecodeDNS()` 函数进行解码。
3. `DecodeDNS()` 函数会调用 `dns_dissect()` 函数对 DNS 报文进行分析。
4. 如果启用了 DPDK,`dns_dissect()` 函数会调用 `dpdk_dns_dissect()` 函数进行分析。
5. `dpdk_dns_dissect()` 函数使用 DPDK 库中的 `rte_dns_pkt_to_query()` 函数将 DNS 报文转换为 DNS 查询请求结构体。
6. `dpdk_dns_dissect()` 函数再调用 `dns_dissect_query()` 函数对查询请求进行分析。
7. `dns_dissect_query()` 函数将查询请求中的域名进行解析,并将解析结果存储在 `DnsQuery` 结构体中。
8. `dpdk_dns_dissect()` 函数最终返回 `DnsQuery` 结构体给 `DecodeDNS()` 函数。
9. `DecodeDNS()` 函数将 `DnsQuery` 结构体中的信息提取出来,如域名、IP 地址等,并将其存储在 `DnsTransaction` 结构体中。
10. `DecodeDNS()` 函数最终返回 `DnsTransaction` 结构体给上层模块进行处理。
函数调用栈如下:
```
DecodeDNS()
-> dns_dissect()
-> dpdk_dns_dissect()
-> rte_dns_pkt_to_query()
-> dns_dissect_query()
```
其中,箭头表示函数调用的方向。