[완료] 자신의 PC에서 IP를 알고 싶은데..

nalrim의 이미지

다시 정리하면 사설 네트워크에 있는 일반유저가 192.168.. 이런 아이피가 아닌 ifconfig eth0 이라는 명령을 통해 inet addr: 부분에 찍히는 실제 아이피를 알고자 합니다.
hostname으로도 알수 없고 방법을 모르겠습니다.
* 일반유저 == 아파치 웹서버 (apache)

ganadist의 이미지

다음의 코드를 사용해보세요. (리눅스에서만 될껍니다.)
그리고 ifconfig는 일반 사용자도 사용가능 합니다. 단지 설정만 할 수 없을뿐입니다.

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
 
int main(int argc, char ** argv) {
        int s;
        char *devname;
        struct ifreq ifr;
        unsigned char *sa_data;
 
        if (argc < 2) {return -1;}
 
        s = socket(AF_INET, SOCK_STREAM, 0);
        devname = argv[1];
        if (s < 0) { return -1;}
 
        strcpy(ifr.ifr_name, devname);
        if (ioctl(s, SIOCGIFADDR, &ifr) < 0) {close(s);return -1;}
 
        sa_data = (unsigned char*) ifr.ifr_ifru.ifru_addr.sa_data;
        printf("device: %s  ip:%d.%d.%d.%d\n", devname, sa_data[2],
                        sa_data[3], sa_data[4], sa_data[5]);
        close(s);
        return 0;
}

$ gcc -o ipaddr ipaddr.c 
$ ./ipaddr eth0
device: eth0  ip:192.168.2.5
$ ./ipaddr eth1
device: eth1  ip:58.140.174.27

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

_nalrim의 이미지

멋집니다! 감사합니다.