| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | #include <netinet/ether.h>#include <stdio.h>#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>/* glibc 2.4 has no ETHER_FILE_NAME, host compile fails without this */#ifndef ETHER_FILE_NAME#define ETHER_FILE_NAME "/etc/ethers"#endif#define ETHER_LINE_LEN 256/* This test requires /etc/ethers to exist * and to have nonzero length */int main(void){	struct ether_addr addr;	char hostname[ETHER_LINE_LEN];	int fd, i;	const char *ethers;	struct stat statb;	if ((fd = open(ETHER_FILE_NAME, O_RDONLY)) == -1) {		perror ("Cannot open file");		exit(1);	}	if (fstat(fd, &statb)) {		perror("Stat failed");		exit(1);	}	ethers = mmap(NULL, statb.st_size, PROT_READ, MAP_SHARED, fd, 0);	if (ethers == MAP_FAILED) {		perror("File mapping failed");		exit(1);	}	ether_line(ethers, &addr, hostname);	for (i = 0; i < 6; i++) {		printf("%02x", addr.ether_addr_octet[i]);		if (i < 5)			printf(":");	}	printf(" %s\n", hostname);	return 0;}
 |