Znajdowanie oryginalnego adresu MAC ze sprzętu

Os: REDHAT LINUX Linux zarządza: 2.6.18.8-1 #

Czy to możliwe, aby bezpośrednio odczytać adres MAC z karty NIC? Mam poniższy kod, ale po prostu czytam z powyższej warstwy, ale nie z samej karty !!!

Próbuję dowiedzieć się, jak znaleźć oryginalny adres MAC karty sieciowej Ethernet na moim komputerze z linuxem. Rozumiem, jak znaleźć bieżący adres MAC za pomocą ifconfig, ale jeśli adres został zmieniony, powiedz, używając'ifconfig eth0 hw ether uu:vv:ww:yy:xx:zz'lub ustawiam to na stałevi /etc/sysconfig/network-scripts/ifcfg-eth0Ten plik ... Mogę z powodzeniemUP to wREBOOT również. jak znaleźć oryginał? Musi istnieć jakiś sposób, aby go znaleźć, ponieważ jest on nadal trwale zapisany na karcie, ale nie mogę znaleźć narzędzia do odczytania wypalonego adresu. czy jest dla niego jakieś narzędzie lub polecenie? Przypuszczam, że napiszę do niego kod C. ale nie wiem jak to zrobić w powyższym przypadku.

** poniżej kodu daje mójobecny MAC, ale nie oryginalny MAC

#include <stdio.h>              /* Standard I/O */
#include <stdlib.h>             /* Standard Library */
#include <errno.h>              /* Error number and related */


#define ENUMS
#include <sys/socket.h>
#include <net/route.h>
#include <net/if.h>
#include <features.h>           /* for the glibc version number */
#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
#include <netpacket/packet.h>
#include <net/ethernet.h>       /* the L2 protocols */
#else
#include <asm/types.h>
#include <linux/if_packet.h>
#include <linux/if_ether.h>     /* The L2 protocols */
#endif
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/un.h>
#include <sys/ioctl.h>
#include <netdb.h>


int main( int argc, char * argv[] ){

unsigned char  mac[IFHWADDRLEN];
int i;
    get_local_hwaddr( argv[1], mac );
    for( i = 0; i < IFHWADDRLEN; i++ ){
        printf( "%02X:", (unsigned int)(mac[i]) );
    }

}


int get_local_hwaddr(const char *ifname, unsigned char *mac)
{
    struct ifreq ifr;
    int fd;
    int rv;                     // return value - error value from df or ioctl call

    /* determine the local MAC address */
    strcpy(ifr.ifr_name, ifname);
    fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
    if (fd < 0)
        rv = fd;
    else {
        rv = ioctl(fd, SIOCGIFHWADDR, &ifr);
        if (rv >= 0)            /* worked okay */
            memcpy(mac, ifr.ifr_hwaddr.sa_data, IFHWADDRLEN);
    }

    return rv;
}

questionAnswers(6)

yourAnswerToTheQuestion