#include #include #include #include #include #include #define BCOPY(a, b, n) memmove((char *)b, (char *)a, n) char *e2str(u_char *); main(int argc, char **argv) { register char *cp; char *prog, *interface; struct ifreq ifr; u_char mymac[IFHWADDRLEN]; int s; if (argv[0] == NULL) prog = "myname"; else if ((cp = strrchr(argv[0], '/')) != NULL) prog = cp + 1; else prog = argv[0]; if (argc != 2) { (void)fprintf(stderr, "%s: no interface supplied\n", prog); (void)fprintf(stderr, "usage: %s {interface}\n", prog); exit(1); } interface = argv[1]; ifr.ifr_addr.sa_family = AF_INET; BCOPY(interface, ifr.ifr_name, sizeof(ifr.ifr_name)); if ((s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0)) < 0) { (void)fprintf(stderr, "%s: unable to create socket on %s: %d\n", prog, interface, errno); exit(1); } if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) { (void)fprintf(stderr, "%s: unable to get ifhwaddr on %s: %d\n", prog, interface, errno); exit(1); } BCOPY(ifr.ifr_hwaddr.sa_data, mymac, IFHWADDRLEN); printf("got MAC address %s for %s\n", e2str(mymac), interface); } char * e2str(register u_char *e) { static char str[32]; (void)sprintf(str, "%02x:%02x:%02x:%02x:%02x:%02x", e[0], e[1], e[2], e[3], e[4], e[5]); return(str); }