Avatar billede dmg Nybegynder
05. maj 2003 - 12:56 Der er 16 kommentarer og
1 løsning

Get MAC Address??? en let måde ;-)

HI...

Jeg skal bruge en kode der kan udskrive min mac adresse, på skærmen...

Jeg køre borland c++ builder 5 og programmere i c++. Jeg er ret ny i alt det her, så en kode der virker uden alt for mange tilrettelser ville være rart.

Hvis det kunne programmeres i een funktion ville det være helt kanon.

Tak for hjælpen...
Avatar billede arne_v Ekspert
05. maj 2003 - 13:03 #1
Avatar billede soreno Praktikant
05. maj 2003 - 13:05 #2
Problemet er at der kan være flere netkort i computeren.. derfor er man nødt til at gøre følgende:

#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;
}

eksempel output (min PC):
<adapter>
        <name>D-Link DFE-538TX 10/100 Adapter</name>
        <ip>212.10.185.28</ip>
        <subnet>255.255.240.0</subnet>
        <mac>00-50-ba-4a-cb-12</mac>
</adapter>

Kan du selv tilrette det ?
Avatar billede mcgoat Nybegynder
05. maj 2003 - 13:48 #3
mac = pAdapterInfo->Address; << her kommer den med Lvalue required hvis man bruger det i Builderen...
Avatar billede arne_v Ekspert
05. maj 2003 - 13:59 #4
Jeg formoder at eksemplerne fra Borland compiler rent i C++ Builder.

:-)
Avatar billede dmg Nybegynder
05. maj 2003 - 14:46 #5
Woww... tak for hjælpen!!!

Til arne_v: Jeg har allerede været inde og se på tree ways to get mac address og jeg kan ik finde ud af helt hvordan jeg deler det op :-(

Til soreno: Det er præcis det jeg skal bruge ;) men som mcgoat siger, virker det ik i borland's c++ builder 5. Den kommer med en Lvalue error???

Koden her ville ellers være, lige det jeg søgte. Kan det laves???
Avatar billede arne_v Ekspert
05. maj 2003 - 14:51 #6
Deler det op ?

Det andet eksempel er da ret overskueligt.

Hvad vil du have delt det op i ?
Avatar billede dmg Nybegynder
05. maj 2003 - 14:56 #7
stop vent... Dette virker fandeme!!!

#include <windows.h>
#include <iostream>
#include <conio.h>

using namespace std;

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

    // Ask COM 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.
    GUID uuid;
    CoCreateGuid(&uuid);
    // Spit the address out
    char mac_addr[18];
    sprintf(mac_addr,"%02X:%02X:%02X:%02X:%02X:%02X",
            uuid.Data4[2],uuid.Data4[3],uuid.Data4[4],
            uuid.Data4[5],uuid.Data4[6],uuid.Data4[7]);
    cout << mac_addr << endl;
    getch();
    return 0;
}

Linket her som arne_v har postet: http://bdn.borland.com/article/0,1410,26040,00.html

ligger sku en kode.

Jeg havde allerede været derinde før, men syntes ik jeg kunne få det til at virke....

Tak for hjælpen arne_v og jer andre...
Avatar billede arne_v Ekspert
05. maj 2003 - 15:02 #8
Som Søren korrekt påpegede så kan der være flere netkort i en
maskine.

Jeg ved faktisk ikke hvad den Guid returnerer i det tilfælde.

Men de fleste PC'ere har kun et netkort.
Avatar billede dmg Nybegynder
08. maj 2003 - 13:36 #9
Nedtur, jeg er blevet snydt :-)

Scriptet ovenover generer en unik mac adresse. Den skulle jo vise min egen!!!!

Hvad skal jeg gøre????
Avatar billede arne_v Ekspert
08. maj 2003 - 13:44 #10
???

Den genererer en UUID - en del af denne UUID er MAC adressen på
dit net-kort.

(en anden del er et timestamp)
Avatar billede dmg Nybegynder
08. maj 2003 - 15:37 #11
arhaaa.... Men jeg skal jo bruge den fuldstændige MAC adresse? Har du nogen ide om how?
Avatar billede arne_v Ekspert
08. maj 2003 - 15:55 #12
Den henter den fuldtsændige MAC adresse.

En MAC adresse er 6 bytes.

Koden ovenfor henter 6 bytes.
Avatar billede arne_v Ekspert
08. maj 2003 - 15:55 #13
(skriver ud i tradtionel format med 12 hexadecimale cifre)
Avatar billede dmg Nybegynder
09. maj 2003 - 10:04 #14
hhhm.... jamen okay.

Men hvordan får jeg MAC adressen fra mit netværkskort ud på skærmen? Det er jo det der er hele menningen ;-)
Avatar billede arne_v Ekspert
09. maj 2003 - 10:10 #15
GUID uuid;
CoCreateGuid(&uuid);
char mac_addr[18];
sprintf(mac_addr,"%02X:%02X:%02X:%02X:%02X:%02X",
        uuid.Data4[2],uuid.Data4[3],uuid.Data4[4],
        uuid.Data4[5],uuid.Data4[6],uuid.Data4[7]);

gemmer MAC adressen i char arrayet mac_addr.

cout << mac_addr << endl;
   
skriver den ud for en console applikation.

For en GUI applikation skal du have displayet mac_addr
(hvordan afhænger lidt af hvilken form for GUI du laver).
Avatar billede dmg Nybegynder
09. maj 2003 - 10:29 #16
Du ved sku hvad du snakker om hva'r ;)

Jeg ved simpelthen ik hvad en GUI er? Men har du mulighed for at hjælpe mig med det ??
Avatar billede arne_v Ekspert
09. maj 2003 - 10:35 #17
console applikation = program du kører i en DOS box og som skriver tekst ud

GUI applikation = windows program med pænt vindue

(GUI = Graphical User Interface)
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