#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <assert.h>
int obtain_mac(const char *ifname, unsigned char *mac, int len)
{
int sk = -1, ret = 0;
struct ifreq ifreq;
assert(ifname);
assert(mac);
assert(len >= 6);
sk = socket(AF_INET, SOCK_STREAM, 0);
if (sk < 0)
{
perror("socket");
ret--;
goto OUT;
}
strcpy(ifreq.ifr_name, ifname);
if (ioctl(sk, SIOCGIFHWADDR, &ifreq) < 0)
{
perror("ioctl");
ret--;
goto OUT;
}
memcpy(mac, (unsigned char *)ifreq.ifr_hwaddr.sa_data, 6);
OUT:
if (sk >= 0)
close(sk);
return ret;
}
int main(int argc, char **argv)
{
unsigned char mac[12];
if (obtain_mac(argv[1], mac, sizeof(mac)) < 0)
return -1;
printf("%02X:%02X:%02X:%02X:%02X:%02X\n",
mac[0],
mac[1],
mac[2],
mac[3],
mac[4],
mac[5]
);
return 0;
}
linux获取指定网口的MAC
最新推荐文章于 2023-10-10 11:06:08 发布