Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <errno.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
- #define MAX_SIZE 4096
- #define HEADER_SIZE 8
- int get_dns_message(char* host)
- {
- char dns_mes[MAX_SIZE];
- char header[MAX_SIZE] = {0xAA, 0xAA, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
- for(int i = 0; i < HEADER_SIZE; i++){
- dns_mes[i] = header[i];
- }
- int before_dot_len = 0;
- int add_pos = HEADER_SIZE + 1;
- for(int i = 0; i < strlen(host); i++){
- if(host[i] == '.'){
- before_dot_len = i;
- dns_mes[HEADER_SIZE] = before_dot_len;
- }
- else{
- dns_mes[i + add_pos] = host[i];
- }
- }
- dns_mes[HEADER_SIZE + before_dot_len + 1] = (int)strlen(host) - before_dot_len - 1;
- int end_pos = HEADER_SIZE + (int)strlen(host) - 1 + 2;
- dns_mes[end_pos] = '\x00';
- dns_mes[end_pos + 1] = '\x00';
- dns_mes[end_pos + 2] = '\x01';
- dns_mes[end_pos + 3] = '\x00';
- dns_mes[end_pos + 4] = '\x01';
- int dns_req_len = end_pos + 5;
- for(int i = 0; i < dns_req_len; i++){
- printf("%x ", dns_mes[i]);
- fflush(stdout);
- }
- printf("\n");
- return dns_req_len;
- }
- int main(int argc, char *argv[]) {
- int sock = socket(AF_INET, SOCK_DGRAM, 0);
- struct sockaddr_in addr = {
- .sin_family = AF_INET,
- .sin_addr = inet_addr("8.8.8.8"),
- .sin_port = htons(53)
- };
- char host[MAX_SIZE];
- char dns_mes[MAX_SIZE];
- while(scanf("%s", host) > 0){
- int dns_req_len = get_dns_message(host);
- // sendto(sock, &dns_mes, dns_req_len,0,
- // (const struct sockaddr*)&addr, sizeof(addr));
- //
- // memset(dns_mes, 0, MAX_SIZE);
- //
- // recvfrom(sock,
- // &dns_mes, MAX_SIZE,
- // 0, NULL, NULL);
- //
- //
- // char c1 = dns_mes[dns_req_len + 12];
- // char c2 = dns_mes[dns_req_len + 13];
- // char c3 = dns_mes[dns_req_len + 14];
- // char c4 = dns_mes[dns_req_len + 15];
- //
- // printf("%d.%d.%d.%d\n", c1, c2, c3, c4);
- // fflush(stdout);
- // memset(dns_mes, 0, MAX_SIZE);
- }
- close(sock);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement