#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>
#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
#include <linux/sockios.h>
#endif
#ifdef OS_SOLARIS
#include <sys/sockio.h>
#endif
#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;
}
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

comments
comments rss (+댓글 쓰러가기)