senddnsquery-raw.lc 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include "udpcksum.h"## 1 ##src/udpcksum/senddnsquery-raw.c##
  2. /*## 2 ##src/udpcksum/senddnsquery-raw.c##
  3. * Build a DNS A query for "a.root-servers.net" and write it to## 3 ##src/udpcksum/senddnsquery-raw.c##
  4. * the raw socket.## 4 ##src/udpcksum/senddnsquery-raw.c##
  5. */## 5 ##src/udpcksum/senddnsquery-raw.c##
  6. /* include send_dns_query */
  7. void## 6 ##src/udpcksum/senddnsquery-raw.c##
  8. send_dns_query(void)## 7 ##src/udpcksum/senddnsquery-raw.c##
  9. {## 8 ##src/udpcksum/senddnsquery-raw.c##
  10. size_t nbytes;## 9 ##src/udpcksum/senddnsquery-raw.c##
  11. char buf[sizeof(struct udpiphdr) + 100], *ptr;## 10 ##src/udpcksum/senddnsquery-raw.c##
  12. uint16_t one;## 11 ##src/udpcksum/senddnsquery-raw.c##
  13. ptr = buf + sizeof(struct udpiphdr); /* leave room for IP/UDP headers */## 12 ##src/udpcksum/senddnsquery-raw.c##
  14. *((uint16_t *) ptr) = htons(1234); /* identification */## 13 ##src/udpcksum/senddnsquery-raw.c##
  15. ptr += 2;## 14 ##src/udpcksum/senddnsquery-raw.c##
  16. *((uint16_t *) ptr) = htons(0x0100); /* flags: recursion desired */## 15 ##src/udpcksum/senddnsquery-raw.c##
  17. ptr += 2;## 16 ##src/udpcksum/senddnsquery-raw.c##
  18. *((uint16_t *) ptr) = htons(1); /* #questions */## 17 ##src/udpcksum/senddnsquery-raw.c##
  19. ptr += 2;## 18 ##src/udpcksum/senddnsquery-raw.c##
  20. *((uint16_t *) ptr) = 0; /* #answer RRs */## 19 ##src/udpcksum/senddnsquery-raw.c##
  21. ptr += 2;## 20 ##src/udpcksum/senddnsquery-raw.c##
  22. *((uint16_t *) ptr) = 0; /* #authority RRs */## 21 ##src/udpcksum/senddnsquery-raw.c##
  23. ptr += 2;## 22 ##src/udpcksum/senddnsquery-raw.c##
  24. *((uint16_t *) ptr) = 0; /* #additional RRs */## 23 ##src/udpcksum/senddnsquery-raw.c##
  25. ptr += 2;## 24 ##src/udpcksum/senddnsquery-raw.c##
  26. memcpy(ptr, "\001a\014root-servers\003net\000", 20);## 25 ##src/udpcksum/senddnsquery-raw.c##
  27. ptr += 20;## 26 ##src/udpcksum/senddnsquery-raw.c##
  28. one = htons(1);## 27 ##src/udpcksum/senddnsquery-raw.c##
  29. memcpy(ptr, &one, 2); /* query type = A */## 28 ##src/udpcksum/senddnsquery-raw.c##
  30. ptr += 2;## 29 ##src/udpcksum/senddnsquery-raw.c##
  31. memcpy(ptr, &one, 2); /* query class = 1 (IP addr) */## 30 ##src/udpcksum/senddnsquery-raw.c##
  32. ptr += 2;## 31 ##src/udpcksum/senddnsquery-raw.c##
  33. nbytes = 36;## 32 ##src/udpcksum/senddnsquery-raw.c##
  34. udp_write(buf, nbytes);## 33 ##src/udpcksum/senddnsquery-raw.c##
  35. if (verbose)## 34 ##src/udpcksum/senddnsquery-raw.c##
  36. printf("sent: %d bytes of data\n", nbytes);## 35 ##src/udpcksum/senddnsquery-raw.c##
  37. }## 36 ##src/udpcksum/senddnsquery-raw.c##
  38. /* end send_dns_query */