Avatar billede danielhep Nybegynder
13. februar 2003 - 14:29 Der er 10 kommentarer og
1 løsning

Get MAC adr

Hej

Er det muligt at hente sin egen MAC adresse fra netkortet med c/c++ kode...

En stykke kode ville være meget til hjælp fordi jeg sidder og skal bruge det så snarest som muligt.... ;)

Mvh

Daniel
Avatar billede bearhugx Nybegynder
13. februar 2003 - 14:44 #1
hvad editor bruger du -- Borland CBuilder ?? MS Visual C++ ???
Avatar billede soreno Praktikant
13. februar 2003 - 14:48 #2
F.eks. kan du finde diverse netkortsinfo sådan:

#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;
}
Avatar billede bearhugx Nybegynder
13. februar 2003 - 14:51 #3
hmm søren >> jeg får to linker-err
[Linker error] undefined reference to `GetAdaptersInfo@8'
[Linker error] undefined reference to `GetNetworkParams@8'

Can you explain ???
Avatar billede soreno Praktikant
13. februar 2003 - 14:52 #4
Med MinGW kompileres (og linkes) sådan (forudsat at der er path til mingw\bin;mingw\lib - samt at filen hedder "main.cpp"):

g++ -c main.cpp -s
g++ -o main.exe main.o -s -liphlpapi


Eksempel output er (min konfiguration):
<adapter>
        <name>Realtek RTL8139 Family PCI Fast Ethernet NIC</name>
        <ip>212.10.185.26</ip>
        <subnet>255.255.240.0</subnet>
        <mac>00-50-ba-4a-cb-12</mac>
</adapter>
Avatar billede soreno Praktikant
13. februar 2003 - 14:52 #5
Det er fordi du ikke linker med "libiphlpapi.a" (se min forrige post).
Avatar billede bearhugx Nybegynder
13. februar 2003 - 14:53 #6
Hmmm jeg bruger Bloodshed Dev-Cpp++ - og der skulle MingW da være med :-/ ???
Avatar billede soreno Praktikant
13. februar 2003 - 14:55 #7
Somewhere i "project options" kan du vælge hvilke ekstra libs du vil linke med - vælg mingw\lib\libiphlpapi.a (husk at vælg filtypen til enten .* eller .a).
Avatar billede bearhugx Nybegynder
13. februar 2003 - 14:55 #8
hmmm den ligger ellers i mit include-bib :-/ --- og jeg har direkte copy-wasted din source ind sååå...
Avatar billede soreno Praktikant
13. februar 2003 - 14:57 #9
Jeg er egentlig ikke sikkert på at iphlpapi er med i ældre version af dev-cpp - om ikke andet så hent:
http://prdownloads.sf.net/mingw/w32api-2.2.tar.gz

og kopier oveni \include og \lib

Så bør det virke ! :-)
Avatar billede danielhep Nybegynder
14. februar 2003 - 08:56 #10
GetNetworkParams
P_ADAPTER_INFO
GetAdaptersInfo
FIXED_INFO
IP_ADDR_STRING

De her udtryk som jeg har skrever, kan jeg ikke finde nogen hjælp til i Builder 5.0 som jeg bruger.  Jeg har fundet ud at det er nogle structure.
Avatar billede soreno Praktikant
14. februar 2003 - 10:18 #11
Søg på MSDN - så finder du dem.
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