1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 #define _GNU_SOURCE 1 29 #include <unistd.h> 30 #include <errno.h> 31 #include <string.h> 32 #include <stdio.h> 33 #include <sys/types.h> 34 #include <netdb.h> 35 36 int main( int argc, char** argv ) 37 { 38 char* hostname = "localhost"; 39 struct hostent* hent; 40 int i, ret; 41 42 if (argc > 1) 43 hostname = argv[1]; 44 45 hent = gethostbyname(hostname); 46 if (hent == NULL) { 47 printf("gethostbyname(%s) returned NULL !!\n", hostname); 48 return 1; 49 } 50 printf( "gethostbyname(%s) returned:\n", hostname); 51 printf( " name: %s\n", hent->h_name ); 52 printf( " aliases:" ); 53 for (i = 0; hent->h_aliases[i] != NULL; i++) 54 printf( " %s", hent->h_aliases[i] ); 55 printf( "\n" ); 56 printf( " address type: " ); 57 switch (hent->h_addrtype) { 58 case AF_INET: printf( "AF_INET\n"); break; 59 case AF_INET6: printf( "AF_INET6\n"); break; 60 default: printf("UNKNOWN (%d)\n", hent->h_addrtype); 61 } 62 printf( " address: " ); 63 switch (hent->h_addrtype) { 64 case AF_INET: 65 { 66 const char* dot = ""; 67 for (i = 0; i < hent->h_length; i++) { 68 printf("%s%d", dot, ((unsigned char*)hent->h_addr)[i]); 69 dot = "."; 70 } 71 } 72 break; 73 74 default: 75 for (i = 0; i < hent->h_length; i++) { 76 printf( "%02x", ((unsigned char*)hent->h_addr)[i] ); 77 } 78 } 79 printf("\n"); 80 return 0; 81 } 82