rendered paste body#include <sys/types.h>#include <net/if.h>#include <sys/ioctl.h>#include <sys/socket.h>#include <errno.h>#include <stdio.h>#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);}