aboutsummaryrefslogtreecommitdiff
path: root/dns_example.c
blob: 62c9a7fa14bda881453df7ce69eea0b8f3581154 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <dns.h>
#include <stdio.h>


int main()
{
    struct dns_answers *cur;
    const char         *server = "1.1.1.1"; /* place your favourite one */
    struct dns_answers *ans    = dns_get(server, "veresov.pro", dns_type_a);
    /* Host is always human-readable domain name of request. */
    for (cur = ans; cur; cur = cur->next) {
        if (cur->type == dns_type_a) {
            /* IP is stored in data as 4 bytes (unsigned chars). */
            unsigned char *ip = cur->data;
            printf("IP address of %s is %d.%d.%d.%d.\n",
                   cur->host, ip[0], ip[1], ip[2], ip[3]);
        } else if (cur->type == dns_type_cname) {
            /* Data is human-readable domain name of response. */
            printf("Cannonical name of %s is %s.\n", cur->host, cur->data);
        } else if (cur->type == dns_type_txt) {
            /* Data is null terminated string of TXT response. */
            printf("Text from %s: %s\n", cur->host, cur->data);
        } else if (cur->type == dns_type_srv) {
            /* SRV answer data is pretty complex,
               so functions to access it are provided. */
            printf("Service %s is located at %s on port %d "
                   "with priority %d and weight %d.\n",
                   cur->host,
                   dns_srv_server(cur->data),   dns_srv_port(cur->data),
                   dns_srv_priority(cur->data), dns_srv_weight(cur->data));
        } else if (cur->type == dns_type_mx) {
            /* Same as with SRV, functions provided. */
            printf("Mail exchange server for %s with preference %d is %s.\n",
                   cur->host,
                   dns_mx_preference(cur->data), dns_mx_server(cur->data));
        }
    }
    dns_free(ans);
    return 0;
}