All pastes #164498 Raw Edit

mac.c

public c v1 · immutable
·published 2006-09-08 17:59 UTC
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);}