diy DNS lookup tool
[rrq/rrqmisc.git] / dns / dnsq.c
1 #include <stdio.h>
2 #include <netdb.h>
3
4 static char *a2c(char *ap,int af) {
5     static char data[1000];
6     char *dp = data;
7     int n;
8     unsigned char *bp = (unsigned char*) ap;
9     unsigned short *sp = (unsigned short *)ap;
10     if ( af == AF_INET ) {
11         for ( n = 0; n < 4; n++ ) {
12             sprintf( dp, ".%d", bp[n] );
13             while ( *(++dp) );
14         }
15     } else {
16         int pack = 0;
17         for ( n = 0; n < 8; n++ ) {
18             if ( pack < 2 && sp[n] == 0 ) {
19                 if ( pack == 0 ) {
20                     *(dp++) = ':';
21                     pack = 1;
22                 }
23             } else {
24                 sprintf( dp, ":%x", ntohs( sp[n] ) );
25                 while ( *(++dp) );
26             }
27         }
28     }
29     return data + 1;
30 }
31
32 static void checkname(char *name,int af) {
33     struct hostent *hp = gethostbyname2( name, af );
34     int i;
35     if ( hp && hp->h_addr_list ) {
36         for ( i = 0; hp->h_addr_list[i]; i++ ) {
37             fprintf( stdout, "%s\n", a2c( hp->h_addr_list[i], af ) );
38         }
39     }
40 }
41
42 int main(int argc,char *argv[]) {
43     int i;
44     for ( i = 1; i < argc; i++ ) {
45         checkname( argv[i], AF_INET );
46         checkname( argv[i], AF_INET6 );
47     }
48     return 0;
49 }