1 /* 2 * trygetif.c - test program for getif.c 3 */ 4 5 #include <sys/types.h> 6 #include <sys/socket.h> 7 8 #if defined(SUNOS) || defined(SVR4) 9 #include <sys/sockio.h> 10 #endif 11 12 #include <net/if.h> /* for struct ifreq */ 13 #include <netinet/in.h> 14 #include <arpa/inet.h> /* inet_ntoa */ 15 16 #include <netdb.h> 17 #include <stdio.h> 18 #include <ctype.h> 19 #include <errno.h> 20 21 #include "getif.h" 22 23 int debug = 0; 24 char *progname; 25 26 main(argc, argv) 27 char **argv; 28 { 29 struct hostent *hep; 30 struct sockaddr ea; /* Ethernet address */ 31 struct sockaddr_in *sip; /* Interface address */ 32 struct ifreq *ifr; 33 struct in_addr dst_addr; 34 struct in_addr *dap; 35 int i, s; 36 37 progname = argv[0]; /* for report */ 38 39 dap = NULL; 40 if (argc > 1) { 41 dap = &dst_addr; 42 if (inet_aton(argv[1], &dst_addr) == 0) { 43 hep = gethostbyname(argv[1]); 44 if (!hep) { 45 printf("gethostbyname(%s)\n", argv[1]); 46 exit(1); 47 } 48 memcpy(&dst_addr, hep->h_addr, sizeof(dst_addr)); 49 } 50 } 51 s = socket(AF_INET, SOCK_DGRAM, 0); 52 if (s < 0) { 53 perror("socket open"); 54 exit(1); 55 } 56 ifr = getif(s, dap); 57 if (!ifr) { 58 printf("no interface for address\n"); 59 exit(1); 60 } 61 printf("Intf-name:%s\n", ifr->ifr_name); 62 sip = (struct sockaddr_in *) &(ifr->ifr_addr); 63 printf("Intf-addr:%s\n", inet_ntoa(sip->sin_addr)); 64 65 exit(0); 66 } 67