mac地址 linux 耍,【Linux】教你如何玩转MAC地址

这段代码用于从指定网络接口获取MAC地址,并将其转换为不同格式。首先,通过socket和ioctl函数获取MAC,然后将MAC以两种格式输出。接着,将MAC转换为无符号长整型并进行加一操作,再将新值转换回MAC地址格式。
摘要由CSDN通过智能技术生成

#include static int get_mac(const char *ifname, unsigned char *mac, int len);

static int get_mac(const char *ifname, unsigned char *mac, int len)

{

int isocket = -1, iret = 0;

struct ifreq ifreq;

if (ifname == NULL || mac == NULL)

{

printf("invalid param\n");

return -1;

}

isocket = socket(AF_INET, SOCK_STREAM, 0);

if (isocket < 0)

{

printf("create socket error\n");

iret = -1;

goto End;

}

strcpy(ifreq.ifr_name, ifname);

if (ioctl(isocket, SIOCGIFHWADDR, &ifreq) < 0)

{

printf("ioctrl error\n");

iret = -1;

goto End;

}

memcpy(mac, (unsigned char *)ifreq.ifr_hwaddr.sa_data, 6);

End:

if (isocket >= 0)

close(isocket);

return iret;

}

int main(int argc, char **argv)

{

unsigned char mac[12];

char acMac1[32] = {0};

char acMac2[32] = {0};

char acMac3[32] = {0};

char acMac4[32] = {0};

unsigned long long ullmac1 = 0;

unsigned long long ullmac2 = 0;

unsigned int a1 = 0;

unsigned int a2 = 0;

unsigned int a3 = 0;

unsigned int a4 = 0;

unsigned int a5 = 0;

unsigned int a6 = 0;

// 获取mac地址

if (get_mac("eth2", mac, sizeof(mac)) < 0)

{

printf("get_mac error\n");

return -1;

}

// 转换mac地址格式

snprintf(acMac1, sizeof(acMac1),"%02X:%02X:%02X:%02X:%02X:%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);

snprintf(acMac2, sizeof(acMac2),"%02X%02X%02X%02X%02X%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);

printf("acMac1[%s]\n", acMac1);

printf("acMac2[%s]\n", acMac2);

// mac地址转换为无符号16位整型

ullmac1 = strtoull(acMac2, NULL, 16);

// 对数值执行操作

ullmac2 = ullmac1 + 1;

printf("ullmac1[%llu]\n",ullmac1);

printf("ullmac2[%llu]\n",ullmac2);

// 对操作之后的数值,重新转换为mac地址格式

a1 = (ullmac2 >> 40) & 0xFF;

a2 = (ullmac2 >> 32) & 0xFF;

a3 = (ullmac2 >> 24) & 0xFF;

a4 = (ullmac2 >> 16) & 0xFF;

a5 = (ullmac2 >> 8) & 0xFF;

a6 = (ullmac2) & 0xFF;

snprintf(acMac3, sizeof(acMac3),"%02X:%02X:%02X:%02X:%02X:%02X",a1,a2,a3,a4,a5,a6);

snprintf(acMac4, sizeof(acMac4),"%02X%02X%02X%02X%02X%02X",a1,a2,a3,a4,a5,a6);

printf("acMac3[%s]\n", acMac3);

printf("acMac4[%s]\n", acMac4);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值