Нахождение оригинального MAC-адреса от самого Аппаратного обеспечения

ОС: REDHAT LINUX Linux управлять: 2.6.18.8-1 #

Можно ли напрямую прочитать MAC-адрес с сетевой карты? У меня есть код ниже, но он только читал сверху слоя, но не саму карту!

Я пытаюсь выяснить, как найти оригинальный MAC-адрес сетевой карты Ethernet на моем компьютере с Linux. Я понимаю, как найти текущий MAC-адрес с помощью ifconfig, но если адрес был изменен, скажем, с помощью'ifconfig eth0 hw ether uu:vv:ww:yy:xx:zz'или я поставилпостоянный» это с помощьюvi /etc/sysconfig/network-scripts/ifcfg-eth0этот файл ... я могу успешноUP это внутриREBOOT также. как мне найти оригинал? Должен быть способ найти его, потому что он все еще навсегда записан на карту, но я могунайти инструмент, чтобы прочитать сожженный адрес. есть ли какая-нибудь утилита для него или команда для него? Я полагаю, написать код C для этого. но нене знаю, как это сделать в вышеуказанном случае.

** код ниже дает мойток MAC, но не оригинальный MAC

#include               /* Standard I/O */
#include              /* Standard Library */
#include               /* Error number and related */


#define ENUMS
#include 
#include 
#include 
#include            /* for the glibc version number */
#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
#include 
#include        /* the L2 protocols */
#else
#include 
#include 
#include      /* The L2 protocols */
#endif
#include 
#include 
#include 
#include 
#include 


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

Ответы на вопрос(6)

Ваш ответ на вопрос