http://www.perlmonks.org?node_id=389278


in reply to MAC Address of An Interface

Did you say use Inline 'C'?

#!/usr/bin/perl use Inline 'C'; get_mac('eth0'); __END__ __C__ #include <sys/socket.h> #include <sys/ioctl.h> #include <net/if.h> void get_mac( char *iface ) { int s; struct ifreq buffer; memset(&buffer, 0x00, sizeof(buffer)); s = socket(PF_INET, SOCK_DGRAM, 0); strcpy(buffer.ifr_name, iface); ioctl(s, SIOCGIFHWADDR, &buffer); close(s); for( s = 0; s < 5; s++ ) printf("%.2X:", (unsigned char)buffer.ifr_hwaddr.sa_data[s]); printf("%.2X\n", (unsigned char)buffer.ifr_hwaddr.sa_data[s]); }

Easy to compile it into a command line C widget you call with backtics so you don't need Inline. Just drop the perl part, add int main(int argc,char *argv[]){get_mac(argv[1]);return 0;}, compile it and then call it from perl like $mac = `widget $iface`

cheers

tachyon