#include #include #include #include "dns.h" int main() { uint8_t pkt[512] = {0}; // DNS header pkt[4] = 0x00; pkt[5] = 0x02; // QDCOUNT = 2 uint8_t *ptr = pkt + 12; // Question 1: foo.com A *ptr++ = 3; memcpy(ptr, "foo", 3); ptr += 3; *ptr++ = 3; memcpy(ptr, "com", 3); ptr += 3; *ptr++ = 0; // null terminator *ptr++ = 0x00; *ptr++ = 0x01; // QTYPE A *ptr++ = 0x00; *ptr++ = 0x01; // QCLASS IN // Question 2: bar.org AAAA *ptr++ = 3; memcpy(ptr, "bar", 3); ptr += 3; *ptr++ = 3; memcpy(ptr, "org", 3); ptr += 3; *ptr++ = 0; *ptr++ = 0x00; *ptr++ = 0x1c; // QTYPE AAAA *ptr++ = 0x00; *ptr++ = 0x01; size_t pkt_len = ptr - pkt; struct dns_question out[4]; size_t count = parse_dns_udp(pkt, pkt_len, out, 4); //printf("Got %zu questions:\n", count); //for (size_t i = 0; i < count; i++) { // printf(" %s (%s)\n", out[i].name, dns_type_to_string(out[i].qtype)); //} int res = (count == 2 && strcmp(out[0].name, "foo.com") == 0 && out[0].qtype == 1 && strcmp(out[1].name, "bar.org") == 0 && out[1].qtype == 28); printf("%s: parse_dns_udp-multi\n", res ? "PASS" : "FAIL"); return res; }