Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!tut.cis.ohio-state.edu!zaphod.mps.ohio-state.edu!math.lsa.umich.edu!emv From: parmelee@wayback.cs.cornell.edu (Larry Parmelee) Newsgroups: alt.sources Subject: iflist -- display network interface information [comp.unix.wizards] Message-ID: <10312@stag.math.lsa.umich.edu> Date: 12 Dec 89 15:54:19 GMT References: <35095@cornell.UUCP> Sender: news@math.lsa.umich.edu Reply-To: parmelee@wayback.cs.cornell.edu (Larry Parmelee) Followup-To: comp.unix.wizards Lines: 165 Archive-name: iflist Original-posting-by: parmelee@wayback.cs.cornell.edu (Larry Parmelee) Original-subject: Re: Determining one's own IP address. Reposted-by: emv@math.lsa.umich.edu (Edward Vielmetti) [This is an experimental alt.sources re-posting from the newsgroup(s) comp.unix.wizards. Comments on this service to emv@math.lsa.umich.edu (Edward Vielmetti).] In article <604@bmers58.UUCP> davem@bmers58.UUCP (Dave Mielke) writes: > I would like to be able to determine my local IP address without > involving a hosts file or yp lookup, i.e. from memory, from within a c > program. Here's a little program that should do it for 4.3BSD systems. Enjoy. -Larry Parmelee parmelee@cs.cornell.edu -----Cut here----- #include #include #include #include #include #include #include #include #ifdef vax #include extern char *ns_ntoa(); #endif extern int errno; extern int sys_nerr; extern char *sys_errlist[]; #define ERR_TXT(z) (zsa_family, AF_TXT(sock->sa_family)); switch (sock->sa_family) { case AF_UNSPEC: break; case AF_INET: { struct sockaddr_in *sin = (struct sockaddr_in *) sock; (void)printf (" %s\tport %d\t", inet_ntoa(sin->sin_addr), htons(sin->sin_port)); if (sin->sin_addr.s_addr == htonl((u_long)INADDR_LOOPBACK)) (void)printf("(INADDR_LOOPBACK)"); else if (sin->sin_addr.s_addr == htonl((u_long)INADDR_ANY)) (void)printf("(INADDR_ANY)"); else if (sin->sin_addr.s_addr == htonl((u_long)INADDR_BROADCAST)) (void)printf("(INADDR_BROADCAST)"); (void)printf ("\n"); } break; #ifdef vax case AF_NS: { struct sockaddr_ns *sns = (struct sockaddr_ns *) sock; (void)printf (" %s\n", ns_ntoa(sns->sns_addr)); } break; #endif default: (void)printf ("Don't know how to format this type sockaddr.\n"); } } void putiflist(ifr) register struct ifreq *ifr; { for ( ; *ifr->ifr_name; ifr++) { (void)printf("interface %s\n",ifr->ifr_name); putsockaddr(&ifr->ifr_addr); (void)printf("\n"); } } main() { struct ifreq *rval; rval=getiflist(); if (rval != 0) { putiflist(rval); free((char *) rval); } }