Study/MFC

현재 사용중인 ip주소를 가져오는 방법

뿡뿡대마왕 2012. 5. 2. 13:09
반응형

현재 사용중인 ip를 가져오는 방법에 대해 알아보도록 하자

방법은 간단하다 gethostbyname()함수를 사용하면 HOSTENT 구조체에 대한 포인터를 리턴하게 되어있다.

HOSTENT 의 구조체 내용을 보면 아래와 같은데

struct hostent { 

        char FAR *              h_name; 

        char FAR * FAR *     h_aliases; 

        short                       h_addrtype; 

        short                       h_length; 

        char FAR * FAR *     h_addr_list; 

};

뭐 위에 대한 구조체에 대한 정의는 인터넷 검색하면 금방나오므로 쉽게 알 수 있을 것이다.

뭐 대락적으로 보면 'h_addr_list에 주소값이 들어 있겠구나' 라고 감이 올것이다.

우선 저 함수를 사용하려면 호스트네임이 필요한데 그건 간단히 gethostname()함수를 쓰면 간단하게 호스트 이름을 얻어낼 수 있다.

자..그럼 현재 자신이 사용하고 있는 ip를 가져오는 소스를 보자면 아래와 같다.

#include <afxsock.h>  //헤더파일 추가해주고~

CString GetCurrentIP()

{

WSADATA wsadata;

      char szHostName[256] ={0,};

      HOSTENT* pHostInfo;

      CString sCurrentIP = "";

      if( WSAStartup(MAKEWORD(2, 0) , &wsadata) == 0)  //윈도우즈 소켓을 초기화 하는 함수.

//MAKEWORD(2,0)은 시스템상에서 윈속 버젼을 요청,

                                                                             //제공되는 윈소켓중에서 호출자가 사용할 수 있는 최고 버전을 설정

{

            if( gethostname(szHostName, sizeof szHostName ) == 0 )  //호스트이름을 가져오고

{

if( pHostInfo = gethostbyname(szHostName) )

{

      if( pHostInfo )  //정보를 가져왔다면

     {

sCurrentIP = inet_ntoa( *(struct in_addr*)*pHostInfo ->h_addr_list ) ; 

//inet_ntoa()함수는 네트워크 바이트 순서(Network-byte order)의 바이너리 주소를 IP address로 변경

     }

}

}

WSACleanup();

}

return sCurrentIP;

}


정보는 공유되어야 한다 쭈욱~~

 

반응형