Click here to Skip to main content
15,881,248 members
Articles / Desktop Programming / MFC
Article

Getting Addresses IP informations

Rate me:
Please Sign up or sign in to vote.
2.17/5 (9 votes)
5 Mar 2003 110.2K   4.9K   46   21
IP, protocols installed, some useful informations

Sample Image - V2.jpg

Introduction

My Ip gives you information about IP addresses, adapter and installed protocols. It gives details about WSADATA structure with comments form MS SDK. No interpretation of the meanings is done this is textually the SDK text. IP addresses are retrieved using the GetNetworkParams function. Another useful feature is IP mask, shown too. This tool could be useful for testing network configurations and for teaching. Beginning programmers could be interesting in the way to detect network parameters. The program is a dialog box including a clock. The WinSock 2.2 DLL must be installed for running My Ip. I have tested My Ip under Windows XP not on others OS. The main WinSock functions used are gethostbyname(...), WSAEnumProtocols(...), GetNumberOfInterfaces(...) and GetNetworkParams(...). I made the tool to detect parameters without beeing connected, and to resolve conflicts between hardware and software. The source code was written with Visual Studio .NET 2002, FRENCH Version. The main work is done with the bool InitNetwork(void) function.

bool InitNetwork(void)
{
    int     iResult;
    DWORD   dwOutBufLen;

    char    szTmp[256];

    iResult = WSAStartup(MAKEWORD(2,2),&WsaData);
    if(iResult)
    {
        // Can't call WSAGetLastError() because WinSock DLL is not loaded !

        wsprintf(szTmp,"WSAStartup failed, returned error code : %d",iResult);
        MessageBox(NULL,szTmp,szError,MB_OK|MB_ICONEXCLAMATION);
        return (FALSE);
    }

    memset(szHostName,0,sizeof(szHostName));<BR><BR><BR> <BR><BR>    // Getting hostname
    if(gethostname(szHostName,sizeof(szHostName)) == SOCKET_ERROR)    <BR>     return (ShowNetworkError("gethostname failed, returned error code : %d"));

    lpHostEnt = gethostbyname(szHostName);
    if(!lpHostEnt)    <BR>     return (<BR>     ShowNetworkError("gethostbyname failed, returned error code : %d"));

    dwBufLen = 0 ;    // Setting to 0, to have the real size of the new buffer

    iResult = WSAEnumProtocols(NULL,lpProtocolBuf,&dwBufLen);
    if(WSAENOBUFS != WSAGetLastError())    <BR>     return (<BR>      ShowNetworkError("WSAEnumProtocols failed, returned error code : %d"));
    
    // The buffer is too small, try to reallocate one with the desired size

    lpProtocolBuf = (WSAPROTOCOL_INFO *) MemoryAlloc(dwBufLen);
    if(!lpProtocolBuf)                    <BR>      return (ShowNetworkError("Memory allocation failed"));
    <BR>    // Returns number of protocols installed
    iNumberOfProtocols = WSAEnumProtocols(NULL, lpProtocolBuf,&dwBufLen) ;    <BR>    if(iNumberOfProtocols == SOCKET_ERROR)
    {
      MemoryFree(lpProtocolBuf);
      return (<BR>      ShowNetworkError("WSAEnumProtocols failed, returned error code : %d"));
    }

    lpFixedInfo = (FIXED_INFO *) MemoryAlloc(sizeof(FIXED_INFO));
    if(!lpFixedInfo)
    {
        MemoryFree(lpProtocolBuf) ;
        return (ShowNetworkError("Memory allocation failed")) ;
    }

    ulOutBufLen = sizeof(FIXED_INFO) ;
   
    iResult = (int) GetNetworkParams(lpFixedInfo,&ulOutBufLen);
    if(iResult == ERROR_BUFFER_OVERFLOW)
    {
        MemoryFree(lpFixedInfo) ;

        lpFixedInfo = (FIXED_INFO *) MemoryAlloc(ulOutBufLen);
        if(!lpFixedInfo)
        {
            MemoryFree(lpProtocolBuf) ;
            return (ShowNetworkError("Memory allocation failed"));
        }
    }
    else
    {
        if(iResult != ERROR_SUCCESS)
        {
            MemoryFree(lpFixedInfo) ;
            MemoryFree(lpProtocolBuf) ;
            return (<BR>      ShowNetworkError("GetNetworkParams failed, returned error code : %d"));
        }
    }

    if(iResult = (int) GetNetworkParams(lpFixedInfo,&ulOutBufLen))
    {
        if(iResult != ERROR_SUCCESS)
        {
            MemoryFree(lpFixedInfo) ;
            MemoryFree(lpProtocolBuf) ;

            return (<BR>      ShowNetworkError("GetNetworkParams failed, returned error code : %d"));
        }
    }

    dwOutBufLen = sizeof(IP_ADAPTER_INFO) ;
    lpAdapterInfo = (PIP_ADAPTER_INFO) MemoryAlloc(dwOutBufLen);
    if(!lpAdapterInfo)
    {
        MemoryFree(lpFixedInfo);
        MemoryFree(lpProtocolBuf);

        return (ShowNetworkError("Memory allocation failed"));
    }

    iResult = GetAdaptersInfo(lpAdapterInfo,&dwOutBufLen);

    if(iResult == ERROR_BUFFER_OVERFLOW)
    {
        MemoryFree(lpAdapterInfo) ;
        lpAdapterInfo = (PIP_ADAPTER_INFO) MemoryAlloc(dwOutBufLen);

        if(!lpAdapterInfo)
        {
            MemoryFree(lpFixedInfo);
            MemoryFree(lpProtocolBuf);

            return (ShowNetworkError("Memory allocation failed"));
        }
    }
    else
    {
        if(iResult != ERROR_SUCCESS)
        {
            MemoryFree(lpFixedInfo);
            MemoryFree(lpProtocolBuf);
            MemoryFree(lpAdapterInfo);

            return (<BR>        ShowNetworkError("GetAdaptersInfo failed, returned error code : %d"));
        }
    }

    dwNumInterfaces = 0;
    GetNumberOfInterfaces(&dwNumInterfaces);

    return (WSACleanup() != SOCKET_ERROR);
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
PhR
Web Developer
France France
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralDoes your code get the NIC MAC Pin
Reader Man San1-Nov-06 1:24
professionalReader Man San1-Nov-06 1:24 
QuestionIPv6 Support ? Pin
Alpha Siera16-Sep-04 1:28
Alpha Siera16-Sep-04 1:28 
GeneralThe Hard Way Pin
Steve Pullan27-Apr-04 18:39
Steve Pullan27-Apr-04 18:39 
GeneralRe: The Hard Way Pin
Anonymous6-Nov-04 16:16
Anonymous6-Nov-04 16:16 
QuestionAny on line service? Pin
pc tsu29-Mar-03 19:26
pc tsu29-Mar-03 19:26 
Is there any on line service that do the same thing? I mean click on some button and the web site will tell you your IP address?
GeneralVague things Pin
gordonfreeman7-Mar-03 2:31
gordonfreeman7-Mar-03 2:31 
Generaldon't work in win2k Pin
gu mingqiu7-Mar-03 2:23
gu mingqiu7-Mar-03 2:23 
GeneralRe: don't work in win2k Pin
Lekrot6-Nov-04 20:34
Lekrot6-Nov-04 20:34 
GeneralRe: don't work in win2k Pin
ThatsAlok6-Nov-04 21:51
ThatsAlok6-Nov-04 21:51 
GeneralRe: don't work in win2k Pin
Anonymous7-Nov-04 0:27
Anonymous7-Nov-04 0:27 
GeneralRe: don't work in win2k Pin
ThatsAlok7-Nov-04 2:01
ThatsAlok7-Nov-04 2:01 
GeneralRe: don't work in win2k Pin
Lekrot7-Nov-04 23:24
Lekrot7-Nov-04 23:24 
GeneralUpdated Pin
fifi6-Mar-03 15:32
fifi6-Mar-03 15:32 
QuestionTime? Pin
Kant20-Feb-03 12:12
Kant20-Feb-03 12:12 
GeneralCool sample image ... Pin
Claudius Mokler18-Feb-03 4:49
Claudius Mokler18-Feb-03 4:49 
GeneralRe: Cool sample image ... Pin
PhR18-Feb-03 7:56
PhR18-Feb-03 7:56 
GeneralDownload is broken Pin
The jackal17-Feb-03 22:19
The jackal17-Feb-03 22:19 
GeneralRe: Download is broken Pin
PhR19-Feb-03 13:16
PhR19-Feb-03 13:16 
Generaldownload is broken Pin
ThomT17-Feb-03 10:34
ThomT17-Feb-03 10:34 
GeneralRe: download is broken Pin
PhR17-Feb-03 11:06
PhR17-Feb-03 11:06 
GeneralRe: download is broken Pin
gjp1730217-Feb-03 13:06
gjp1730217-Feb-03 13:06 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.