본문 바로가기
Study/MFC

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

by 뿡뿡대마왕 2012. 5. 2.
반응형

현재 사용중인 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;

}


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

 

반응형

댓글