linux记录硬件地址mac地址,linux – 从硬件本身查找原始MAC地址

博客探讨了如何在REDHAT LINUX系统中获取以太网NIC的原始MAC地址,而不是当前配置的地址。作者提到知道如何使用ifconfig和ifcfg-eth0文件查看或设置MAC,但寻求一种方法来直接从NIC读取烧录的MAC。博客包含了一段C代码,该代码目前只能获取当前配置的MAC,而非硬件的原始地址。
摘要由CSDN通过智能技术生成

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值