Os:REDHAT LINUX Linux管理:2.6.18.8-1#
是否可以直接从NIC读取MAC地址?我有下面的代码,但它只是从上层读取,但不是卡本身!
我试图找出我的linux框上如何找到以太网NIC的原始MAC地址。我了解如何使用ifconfig查找当前的MAC地址,但是如果地址已经更改,可以通过使用说明
‘ifconfig eth0 hw ether uu:vv:ww:yy:xx:zz’,或者我使用vi /etc/sysconfig/network-scripts/ifcfg-eth0.this文件设置“永久”…我可以成功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;
}