jak zjiskat MAC v C
Jaroslav Snajdr
jarda na tinysoftware.com
Pondělí Březen 13 14:02:59 CET 2000
Roman Pavera wrote:
> potrebuji zjistit MAC adresu sitoveho zarizeni v C/C++ (ten
> program nebezi pod rootem). Koukal jsem na zdrojaky arp, ale
> moc z toho moudry nejsem.
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/ioctl.h>
#include <net/if.h>
int main(int argc, char *argv[])
{
/* struktura, ktera je parametrem pro ioctl. Definice viz net/if.h */
struct ifreq ifr;
int sock;
unsigned char *ptr;
if (argc != 2) {
printf("Usage: %s [interface name]\n", argv[0]);
exit(1);
}
/* jmeno zarizeni muze mit max. 15 znaku */
if (strlen(argv[1]) >= IFNAMSIZ) {
printf("Interface name too large\n");
exit(1);
}
/* sitova zarizeni se ovladaji pres socket, protoze nemaji
* zadny soubor v /dev
*/
if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0) {
perror("Cannot create socket");
exit(1);
}
/* Zkopirujeme jmeno zarizeni do ifr */
strcpy(ifr.ifr_name, argv[1]);
/* A zavolame ioctl */
if (ioctl(sock, SIOCGIFHWADDR, &ifr) != 0) {
perror("ioctl() failed");
close(sock);
exit(1);
}
/* Nakonec vypiseme ziskanou adresu. Tohle funguje spravne jen
* pro ethernetove adresy, na jine typy hardware se podivejte
* do zdrojaku ifconfigu.
*/
ptr = ifr.ifr_hwaddr.sa_data;
printf("HW Address: %02X:%02X:%02X:%02X:%02X:%02X\n",
ptr[0] & 0xff, ptr[1] & 0xff, ptr[2] & 0xff,
ptr[3] & 0xff, ptr[4] & 0xff, ptr[5] & 0xff);
close(sock);
return 0;
}
-jns
Další informace o konferenci Linux