Advertisement
Guest User

Untitled

a guest
May 20th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <arpa/inet.h>
  5. #include <errno.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <unistd.h>
  9. #include <string.h>
  10.  
  11. #define MAX_SIZE 4096
  12. #define HEADER_SIZE 8
  13.  
  14.  
  15.  
  16. int get_dns_message(char* host)
  17. {
  18. char dns_mes[MAX_SIZE];
  19. char header[MAX_SIZE] = {0xAA, 0xAA, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  20.  
  21. for(int i = 0; i < HEADER_SIZE; i++){
  22. dns_mes[i] = header[i];
  23. }
  24.  
  25. int before_dot_len = 0;
  26. int add_pos = HEADER_SIZE + 1;
  27.  
  28.  
  29. for(int i = 0; i < strlen(host); i++){
  30. if(host[i] == '.'){
  31. before_dot_len = i;
  32. dns_mes[HEADER_SIZE] = before_dot_len;
  33. }
  34. else{
  35. dns_mes[i + add_pos] = host[i];
  36. }
  37. }
  38.  
  39.  
  40. dns_mes[HEADER_SIZE + before_dot_len + 1] = (int)strlen(host) - before_dot_len - 1;
  41.  
  42. int end_pos = HEADER_SIZE + (int)strlen(host) - 1 + 2;
  43. dns_mes[end_pos] = '\x00';
  44. dns_mes[end_pos + 1] = '\x00';
  45. dns_mes[end_pos + 2] = '\x01';
  46. dns_mes[end_pos + 3] = '\x00';
  47. dns_mes[end_pos + 4] = '\x01';
  48.  
  49.  
  50. int dns_req_len = end_pos + 5;
  51.  
  52. for(int i = 0; i < dns_req_len; i++){
  53. printf("%x ", dns_mes[i]);
  54. fflush(stdout);
  55. }
  56. printf("\n");
  57.  
  58. return dns_req_len;
  59. }
  60.  
  61.  
  62.  
  63.  
  64.  
  65. int main(int argc, char *argv[]) {
  66. int sock = socket(AF_INET, SOCK_DGRAM, 0);
  67.  
  68. struct sockaddr_in addr = {
  69. .sin_family = AF_INET,
  70. .sin_addr = inet_addr("8.8.8.8"),
  71. .sin_port = htons(53)
  72. };
  73.  
  74. char host[MAX_SIZE];
  75. char dns_mes[MAX_SIZE];
  76.  
  77. while(scanf("%s", host) > 0){
  78. int dns_req_len = get_dns_message(host);
  79.  
  80. // sendto(sock, &dns_mes, dns_req_len,0,
  81. // (const struct sockaddr*)&addr, sizeof(addr));
  82. //
  83. // memset(dns_mes, 0, MAX_SIZE);
  84. //
  85. // recvfrom(sock,
  86. // &dns_mes, MAX_SIZE,
  87. // 0, NULL, NULL);
  88. //
  89. //
  90. // char c1 = dns_mes[dns_req_len + 12];
  91. // char c2 = dns_mes[dns_req_len + 13];
  92. // char c3 = dns_mes[dns_req_len + 14];
  93. // char c4 = dns_mes[dns_req_len + 15];
  94. //
  95. // printf("%d.%d.%d.%d\n", c1, c2, c3, c4);
  96. // fflush(stdout);
  97. // memset(dns_mes, 0, MAX_SIZE);
  98. }
  99.  
  100. close(sock);
  101. return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement