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