首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在dpdk数据包中显示或执行eDNS?

如何在dpdk数据包中显示或执行eDNS?
EN

Stack Overflow用户
提问于 2021-09-21 11:37:17
回答 1查看 56关注 0票数 0

我使用的是l2fwd-dpdk应用程序,我可以从中提取5个元组,并可以查看是否存在DNS数据包。

现在,我想使用dpdk对DNS数据包进行分类,但我失败了。这是我的密码。

代码语言:javascript
复制
 struct rte_udp_hdr *udp_hdr;
 struct dnshdr *dns_hdr;

 if (rte_be_to_cpu_16(udp_hdr->dst_port) == 53)
 {  
 printf("DNS Packet");
 char *dns_hdr = (char *)udp_hdr + sizeof(rte_udp_hdr);
 }

我想分开

  • Flags
  • Rdata
  • Class
  • TTL

把它们分开保存。有什么办法可以绕过,我也可以舒适地使用cpp包装。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-21 13:06:52

从21.08开始,DPDK不包含到DNS数据包的任何标头或结构。因此,解决@通配符中提到的问题的最简单方法是声明您的自定义DNS头并使用它。在您的代码片段中,您已经有了struct dnshdr *dns_hdr;,因此更简单的方法是修改现有代码以反映

代码语言:javascript
复制
 struct rte_udp_hdr *udp_hdr;
 struct dnshdr *dns_hdr;

/* use DPDK mtod API to get the start of ethernet frame */
/* check for packet size, ether type, IP protocol */
/* update udp_hdr to position in the packet */

 if (rte_be_to_cpu_16(udp_hdr->dst_port) == 53)
 {  
 printf("DNS Packet");
 struct dnshdr *dns_hdr = (struct dnshdr *)((char *)udp_hdr + sizeof(rte_udp_hdr));
 }

注意:可能的结构定义代码片段将是

代码语言:javascript
复制
typedef struct {
    uint16_t id;
    uint16_t rd:1;
    uint16_t tc:1;
    uint16_t aa:1;
    uint16_t opcode:4;
    uint16_t qr:1;
    uint16_t rcode:4;
    uint16_t zero:3;
    uint16_t ra:1;
    uint16_t qcount;    /* question count */
    uint16_t ancount;   /* Answer record count */
    uint16_t nscount;   /* Name Server (Autority Record) Count */ 
    uint16_t adcount;   /* Additional Record Count */
} custom_dnshdr;

custom_dnshdr *dns_hdr = (custom_dnshdr *) ((char *)udp_hdr + sizeof(rte_udp_hdr));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69268224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档