获取mac地址 c语言,C语言获取服务器mac地址

本文介绍了如何使用C语言在Linux和AIX系统中获取服务器的MAC地址。在Linux中,通过ioctl函数SIOCGIFCONF和SIOCGIFHWADDR获取;在AIX中,由于缺少SIOCGIFHWADDR,提供了两种替代方法,一种是通过ioctl(SIOCGIFCONF)和强制类型转换,另一种是利用getkerninfo函数获取硬件信息。
摘要由CSDN通过智能技术生成

Linux系统

在Linux系统,可以通过系统调用函数ioctl很容易就获取到服务器的mac地址。#include

#include

#include

#include

#include

#include

int main()

{

int sock, if_count, i;

struct ifconf ifc;

struct ifreq ifr[10];

unsigned char mac[6];

memset(&ifc, 0, sizeof(struct ifconf));

sock = socket(AF_INET, SOCK_DGRAM, 0);

ifc.ifc_len = 10 * sizeof(struct ifreq);

ifc.ifc_buf = (char *)ifr;

//获取所有网卡信息

ioctl(sock, SIOCGIFCONF, (char *)&ifc);

if_count = ifc.ifc_len / (sizeof(struct ifreq));

for (i = 0; i < if_count; i++) {

if (ioctl(sock, SIOCGIFHWADDR, &ifr[i]) == 0) {

memcpy(mac, ifr[i].ifr_hwaddr.sa_data, 6);

printf("eth: %s, mac: %02x:%02x:%02x:%02x:%02x:%02x\n", ifr[i].ifr_name, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);

}

}

return 0;

}

核心逻辑主要分两个部分,第一个部分是获取网卡,主要通过下面的函数完成:ioctl(sock, SIOCGIFCONF, (char *)&ifc);

它的信息保存在结构体struct ifconf中,有可能不止一个。获取到的信息保存在ifc_buf中。

第二个逻辑就是根据网卡的名字去获取mac地址,主要用下面的函数完成:ioctl(sock, SIOCGIFHWADDR, &ifr[i]);

通过上面简单的两步,就能获取到Linux服务器上所有的网卡对应的mac地址。

当前操作系统信息:[root@vm101108 src]# uname -a

Linux vm101108 3.10.0-1160.15.2.el7.x86_64 #1 SMP Wed Feb 3 15:06:38 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

[root@vm101108 src]# cat /etc/os-release

NAME="CentOS Linux"

VERSION="7 (Core)"

ID="centos"

ID_LIKE="rhel fedora"

VERSION_ID=&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值