diy DNS lookup tool
authorRalph Ronnquist <ralph.ronnquist@gmail.com>
Fri, 22 Jul 2022 22:42:40 +0000 (08:42 +1000)
committerRalph Ronnquist <ralph.ronnquist@gmail.com>
Fri, 22 Jul 2022 22:42:40 +0000 (08:42 +1000)
dns/dnsq.c [new file with mode: 0644]

diff --git a/dns/dnsq.c b/dns/dnsq.c
new file mode 100644 (file)
index 0000000..d9c94e5
--- /dev/null
@@ -0,0 +1,49 @@
+#include <stdio.h>
+#include <netdb.h>
+
+static char *a2c(char *ap,int af) {
+    static char data[1000];
+    char *dp = data;
+    int n;
+    unsigned char *bp = (unsigned char*) ap;
+    unsigned short *sp = (unsigned short *)ap;
+    if ( af == AF_INET ) {
+       for ( n = 0; n < 4; n++ ) {
+           sprintf( dp, ".%d", bp[n] );
+           while ( *(++dp) );
+       }
+    } else {
+       int pack = 0;
+       for ( n = 0; n < 8; n++ ) {
+           if ( pack < 2 && sp[n] == 0 ) {
+               if ( pack == 0 ) {
+                   *(dp++) = ':';
+                   pack = 1;
+               }
+           } else {
+               sprintf( dp, ":%x", ntohs( sp[n] ) );
+               while ( *(++dp) );
+           }
+       }
+    }
+    return data + 1;
+}
+
+static void checkname(char *name,int af) {
+    struct hostent *hp = gethostbyname2( name, af );
+    int i;
+    if ( hp && hp->h_addr_list ) {
+       for ( i = 0; hp->h_addr_list[i]; i++ ) {
+           fprintf( stdout, "%s\n", a2c( hp->h_addr_list[i], af ) );
+       }
+    }
+}
+
+int main(int argc,char *argv[]) {
+    int i;
+    for ( i = 1; i < argc; i++ ) {
+       checkname( argv[i], AF_INET );
+       checkname( argv[i], AF_INET6 );
+    }
+    return 0;
+}