Avatar billede joeb Nybegynder
30. april 2003 - 20:41 Der er 5 kommentarer og
1 løsning

Få fat i IP adresse i MFC

Hvordan kan jeg på en simpel må få fat i ip-adressen ved brug af MFC? Synes kun at kunne finde temmelig gamle metoder skrevet i C. Det må da kunne gøres mere simpelt?
Avatar billede soreno Praktikant
30. april 2003 - 21:11 #1
Jeg har noget relativt simpelt kode som skaffer info om hver adapter på PC'en, det er ikke MFC, men jeg vil tro det er nemt at sætte ind (jeg er ikke selv "MFC mand")..

#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>

int main(int argc, char *argv)
{
    IP_ADAPTER_INFO AdapterInfo[16];
    DWORD dwBufLen = sizeof(AdapterInfo);
    DWORD dwStatus = GetAdaptersInfo(AdapterInfo, &dwBufLen);
    IP_ADAPTER_INFO *pAdapterInfo = AdapterInfo;

    FIXED_INFO AdapterFixedInfo[16];
    DWORD dwLen = sizeof(AdapterFixedInfo);
    GetNetworkParams(AdapterFixedInfo, &dwLen);
    FIXED_INFO *pAdapterFixedInfo = AdapterFixedInfo;
    IP_ADDR_STRING *dnsList;
 
    do
    {
        printf("<adapter>\n");
        printf("\t<name>%s</name>\n", pAdapterInfo->Description);
        printf("\t<ip>%s</ip>\n", pAdapterInfo->IpAddressList.IpAddress.String);
        printf("\t<subnet>%s</subnet>\n", pAdapterInfo->IpAddressList.IpMask.String);

        BYTE mac[8];
        mac = pAdapterInfo->Address;
        char macaddr[32] = "";
        sprintf(macaddr, "%02x-%02x-%02x-%02x-%02x-%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);

        printf("\t<mac>%s</mac>\n", macaddr);
        printf("</adapter>\n");

        pAdapterInfo = pAdapterInfo->Next;
    }
    while(pAdapterInfo);
   
    return 0;
}

Output hos mig:
<adapter>
        <name>D-Link DFE-538TX 10/100 Adapter</name>
        <ip>212.10.185.186</ip>
        <subnet>255.255.240.0</subnet>
        <mac>00-50-ba-4a-cb-12</mac>
</adapter>
Avatar billede soreno Praktikant
30. april 2003 - 21:13 #2
Du skal huske at linke med "iphlpapi" - jeg er ikke lige helt sikker på hvad det hedder i MSVC++ (måske iphlpapi.lib).
Avatar billede joeb Nybegynder
30. april 2003 - 21:46 #3
lader ikke til at iphlpapi.lib findes i MSVC
Avatar billede soreno Praktikant
30. april 2003 - 21:49 #4
Så kan det godt ske du skulle opdatere din SDK.

Mener det er denne side du skal hente den fra:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

(Det er vist nok en "ordentlig børge")
Avatar billede jpk Nybegynder
01. maj 2003 - 08:35 #5
Jeg har lavet følgende funktion, der udfylder 2 CString members kaldet m_pc_name og m_ip_address:
(du skal linke med ws2_32.lib)

int CNetInfoDlg::GetNameAndIp()
{
    WSAData wsaData;
    WSAStartup(MAKEWORD(1, 1), &wsaData);
    char ac[80];
    if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR)
    {
        cerr << "Error " << WSAGetLastError() <<
                " when getting local host name." << endl;
        WSACleanup();
        return 1;
    }
    m_pc_name = ": ";
    m_pc_name += ac;

    struct hostent* phe = gethostbyname(ac);
    if (phe == 0) {
        cerr << "Yow!  Bad host lookup." << endl;
        WSACleanup();
        return 1;
    }
   
    for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
        struct in_addr addr;
        memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
        m_ip_address = i + ": ";
        m_ip_address += inet_ntoa(addr);
    }

    WSACleanup();
    return 0;
}
Avatar billede joeb Nybegynder
01. maj 2003 - 11:16 #6
Den bedste løsning for mig var jpk's. Fik aldrig iphlpapi.lib til at virke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester