Superkkt Blog

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <net/if.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stropts.h>
#include <netinet/in.h>
#ifdef   OS_LINUX
#include <linux/sockios.h>
#endif
#ifdef   OS_SOLARIS
#include <sys/sockio.h>
#endif
#define MAX_NIC 10

static char *
get_ipaddr(void)
{
   int i, fd;
   int numif;
   static char ip[INET_ADDRSTRLEN];

   struct ifconf ifc;
   struct ifreq ifr[MAX_NIC];
   struct in_addr addr;

   ifc.ifc_len = sizeof(ifr);
   ifc.ifc_ifcu.ifcu_req = ifr;

   if((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
      return NULL;
   }
   if(ioctl(fd, SIOCGIFCONF, &ifc) < 0) {
      return NULL;
   }
   close(fd);

   numif = ifc.ifc_len / sizeof(struct ifreq);
   for(i = 0; i < numif; i++) {
      if(ifc.ifc_ifcu.ifcu_req[i].ifr_ifru.ifru_addr.sa_family != AF_INET) {
         continue;
      }
      addr = ((struct sockaddr_in *) &ifc.ifc_ifcu.ifcu_req[i].ifr_ifru.ifru_addr)->sin_addr;
      if(addr.s_addr == htonl(0x7f000001)) {   /* 127.0.0.1 */
         continue;
      }
      strcpy(ip, inet_ntoa(addr));

      return ip;
   }
   
   return NULL;
}

<컴파일 방법>
1. 리눅스
# gcc -Wall -g -DOS_LINUX -o get_ip get_ip.c

2. 솔라리스
# gcc -Wall -g -DOS_SOLARIS -o get_ip get_ip.c
2006/03/19 17:07 2006/03/19 17:07

trackbacks

trackbacks rss

이 글에는 트랙백을 보낼 수 없습니다

Leave a Comment