Avatar billede bumle90 Nybegynder
26. januar 2004 - 13:14 Der er 22 kommentarer og
1 løsning

MAC og IP adresse

Hej, jeg ville høre om nogle vidste hvordan man finder MAC-adr. og IP frem for sin computer i Cpp
Avatar billede jpk Nybegynder
26. januar 2004 - 13:18 #1
Avatar billede bumle90 Nybegynder
26. januar 2004 - 13:32 #2
hmmm det ser ud til jeg mangler en lib fil når jeg linker...Hvad er det for en ?

mactest.obj : error LNK2001: unresolved external symbol __imp__inet_ntoa@4
mactest.obj : error LNK2001: unresolved external symbol __imp__gethostbyname@4
mactest.obj : error LNK2001: unresolved external symbol __imp__WSAGetLastError@0
mactest.obj : error LNK2001: unresolved external symbol __imp__gethostname@8
mactest.obj : error LNK2001: unresolved external symbol __imp__WSACleanup@0
mactest.obj : error LNK2001: unresolved external symbol __imp__WSAStartup@8
Avatar billede bumle90 Nybegynder
26. januar 2004 - 13:49 #3
oki, nu fik jeg den compileret...Men din kode for MAC adr. virker ikke..:Den skriver bare 0 der..De to andre virker fint..Altså compnavn og ip
Avatar billede bumle90 Nybegynder
26. januar 2004 - 13:56 #4
Er du der jpk?
Avatar billede jpk Nybegynder
26. januar 2004 - 14:21 #5
Øh, koden indeholder ikke noget udtræk af MAC adresse...
Avatar billede bumle90 Nybegynder
26. januar 2004 - 14:49 #6
nej det så jeg.. :)
Dog var det det jeg efterlyste
Avatar billede jpk Nybegynder
26. januar 2004 - 14:51 #7
Tja, du efterlyste vel også IP-adressen..?
Avatar billede bumle90 Nybegynder
26. januar 2004 - 15:02 #8
ja det er korrekt :)
Jeg fik ikke skrevet det ordentligt er jeg bange for...MAC adr. var vigtigst, og ip adr. var god men mindre relevant...
Men du fandt IP adr for mig...
Det er kanon....Du har ikke også kode til at finde MAC vel?
Avatar billede jpk Nybegynder
26. januar 2004 - 15:03 #9
Jeg har dette eksempel liggende, men jeg ved ikke om det virker...


#include <rpc.h>
#include <iostream>

#ifdef __BORLANDC__
    namespace std {
    };
#endif

using namespace std;

void main()
{
    cout << "MAC address is: ";

    // Ask RPC to create a UUID for us.  If this machine has an Ethernet
    // adapter, the last six bytes of the UUID (bytes 2-7 inclusive in
    // the Data4 element) should be the MAC address of the local
    // Ethernet adapter.
    UUID uuid;
    UuidCreate(&uuid);

    // Spit the address out
    for (int i = 2; i < 8; ++i) {
        cout << hex;
        cout.fill('0');
        cout.width(2);
        cout << int(uuid.Data4[i]);
        if (i < 7) {
            cout << ":";
        }
    }
    cout << endl;
}
Avatar billede bumle90 Nybegynder
26. januar 2004 - 15:06 #10
Deter til borland ?
jf.
Avatar billede bumle90 Nybegynder
26. januar 2004 - 15:06 #11
#ifdef __BORLANDC__
    namespace std {
    };
#endif
Avatar billede jpk Nybegynder
26. januar 2004 - 15:07 #12
Ifølge MSDN bruger UuidCreate ikke længere MAC-adressen til at genere et uuid med, UuidCreateSequential skal nok bruges istedet...
Avatar billede jpk Nybegynder
26. januar 2004 - 15:07 #13
bare fjern den...
Avatar billede jpk Nybegynder
26. januar 2004 - 15:15 #14
På denne side er der nogle forskellige måder at finde MAC-adressen på:
http://www.codeguru.com/network/GetMAC.html
Avatar billede soreno Praktikant
26. januar 2004 - 19:29 #15
Jeg plejer at bruge dette stykke kode til at udtrække netoplysninger.

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

char* trim(char *text);

int main()
{
    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;
 
    while(pAdapterInfo)
    {
        printf("<adapter>\n");
        printf("\t<name>%s</name>\n", trim(pAdapterInfo->Description));
        printf("\t<ip>%s</ip>\n", pAdapterInfo->IpAddressList.IpAddress.String);
        printf("\t<subnet>%s</subnet>\n", pAdapterInfo->IpAddressList.IpMask.String);

        BYTE rawMac[8];
        for(int i=0;i<8;i++)
        {
            rawMac[i] = pAdapterInfo->Address[i];
        }
        char macaddr[32] = "";
        sprintf(macaddr, "%02x-%02x-%02x-%02x-%02x-%02x", rawMac[0], rawMac[1], rawMac[2], rawMac[3], rawMac[4], rawMac[5]);

        printf("\t<mac>%s</mac>\n", macaddr);
        printf("\t<dhcp_lease_obtained>%s</dhcp_lease_obtained>\n", trim(ctime(&pAdapterInfo->LeaseObtained)));
        printf("\t<dhcp_lease_expires>%s</dhcp_lease_expires>\n", trim(ctime(&pAdapterInfo->LeaseExpires)));
        printf("</adapter>\n");

        pAdapterInfo = pAdapterInfo->Next;
    }
   
    return 0;
}

char* trim(char *text)
{
    int length = strlen(text)-1;

    // sålænge de sidste tegn i text er Space, New Line eller Carriage return
    // tælles længde af strengen ned, der tælles ned bagfra.
    while(text[length]==0x20 || text[length]==0x0a || text[length]==0x0d)
    {
        length--;
    }

    // terminér text umiddelbart før uønskede tegn i arrayet.
    text[length+1] = 0x00;
    return text;
}

Der skal linkes med et lib der hedder "liphlpapi" (på gcc). Jeg ved ikke hvad det hedder i MSVC.
Avatar billede bumle90 Nybegynder
27. januar 2004 - 14:30 #16
Er der virkelig ikke en nemmere måde?
Avatar billede soreno Praktikant
27. januar 2004 - 16:50 #17
Problemet er at en PC kan have flere adaptere. Så er man nødt til at specificere hvilken adapter man ønsker info om. Min kode gennemløber alle adaptere og viser udvalgt info for hver især.

En løsning er at lave en funktion der returnere det info du skal bruge på den form som du ønsker.
Avatar billede bumle90 Nybegynder
28. januar 2004 - 14:32 #18
hmm ja oki...Men jeg tænkte bare om der ikke findes nogle standard .h filer i VCpp der kan klare det. Det er da utroligt at man skal bruge 3. parts filer til at finde noget så basalt og ofte brugt som en MAC addresse....Kan det virkelig være sandt?
Avatar billede jpk Nybegynder
28. januar 2004 - 14:49 #19
Hvad mener du med 3.parts filer?
Det er jo bare eksempler på hvordan det kan gøres; du behøver ikke nogle 3.part libs...
Avatar billede bumle90 Nybegynder
28. januar 2004 - 15:06 #20
Der skal da bruges liphlpapi.lib
Er det ikke et 3. parts bibliotek?
Avatar billede jpk Nybegynder
28. januar 2004 - 15:10 #21
Følger det ikke med compileren/SDK'en?
Avatar billede soreno Praktikant
28. januar 2004 - 18:54 #22
Liphlpapi, som formentlig hedder iphlpapi.lib på MSVC, er en del af win32 api'et.

Så hvis du ikke har den bør du opdatere din SDK.
Avatar billede thedemonhunter Nybegynder
06. februar 2004 - 09:55 #23
hehe sjovt du spørger men hvis det er i 2000 /xp og du kun har et netkort kan du nøjes med at skrive system("ipconfig /all && pause");
det virker for har det selv til at køre i et program
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