php tutorial to get the native mac address three ways
class getmacaddr
{
var $ return_array = array (); // returns an array of strings of mac addresses
var $ mac_addr;
function getmacaddr ($ os_type)
{
switch (strtolower ($ os_type))
{
case "linux":
$ this-> forlinux ();
break;
case "solaris":
break;
case "unix":
break;
case "aix":
break;
default:
$ this-> forwindows ();
break;
}
$ temp_array = array ();
foreach ($ this-> return_array as $ value)
{
if (preg_match ("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0 -9a-f] [0-9a-f] [: -] "." [0-9a-f] [0-9a-f] [: 9a-f] [: -] "." [0-9a-f] [0-9a-f] / i ", $ value, $ temp_array))
{
$ this-> mac_addr = $ temp_array [0];
break;
}
}
unset ($ temp_array);
return $ this-> mac_addr;
}
function forwindows ()
{
@exec ("ipconfig / all", $ this-> return_array);
if ($ this-> return_array)
return $ this-> return_array;
else {
$ ipconfig = $ _server ["windir"]. "system32ipconfig.exe";
if (is_file ($ ipconfig))
@exec ($ ipconfig. "/ all", $ this-> return_array);
else
@exec ($ _ server ["windir"]. "systemipconfig.exe / all", $ this-> return_array);
return $ this-> return_array;
}
}
function forlinux ()
{
@exec ("ifconfig -a", $ this-> return_array);
return $ this-> return_array;
}
}
?>
<?
$ mac = new getmacaddr (php_os);
echo $ mac-> mac_addr;
//Method Two
qstring getlocalmac ()
{
int sock_mac;
struct ifreq ifr_mac;
char mac_addr [30];
sock_mac = socket (af_inet, sock_stream, 0);
if (sock_mac == -1)
{
perror ("create socket falise ... macn");
return "";
}
memset (& ifr_mac, 0, sizeof (ifr_mac));
strncpy (ifr_mac.ifr_name, "eth0", sizeof (ifr_mac.ifr_name) -1);
if ((ioctl (sock_mac, siocgifhwaddr, & ifr_mac)) <0)
{
printf ("mac ioctl errorn");
return "";
}
sprintf (mac_addr, "% 02x% 02x% 02x% 02x% 02x% 02x",
(unsigned char) ifr_mac.ifr_hwaddr.sa_data [0],
(unsigned char) ifr_mac.ifr_hwaddr.sa_data [1],
(unsigned char) ifr_mac.ifr_hwaddr.sa_data [2],
(unsigned char) ifr_mac.ifr_hwaddr.sa_data [3],
(unsigned char) ifr_mac.ifr_hwaddr.sa_data [4],
(unsigned char) ifr_mac.ifr_hwaddr.sa_data [5]);
printf ("local mac:% s n", mac_addr);
close (sock_mac);
return qstring (mac_addr);
}
Use c to achieve
int getalllocaladaptermacaddr (std :: list <std :: vector <unsigned char>> & mac)
{
ncb ncb
lana_enum adapterlist;
memset (& ncb, 0, sizeof (ncb));
ncb.ncb_command = ncbenum;
ncb.ncb_buffer = (unsigned char *) & adapterlist;
ncb.ncb_length = sizeof (adapterlist);
netbios
mac.resize (0);
for (int i = 0; i <adapterlist.length; ++ i)
{
struct astat
{
adapter_status adapt;
name_buffer ps tutorial z_name [30];
} adapter;
// reset the lan adapter so that we can begin querying it
ncb ncb
memset (& ncb, 0, sizeof (ncb));
ncb.ncb_command = ncbreset;
ncb.ncb_lana_num = adapterlist.lana [i];
if (netbios (& ncb)! = nrc_goodret)
continue
// prepare to get the adapter status block
memset (& ncb, 0, sizeof (ncb));
ncb.ncb_command = ncbastat;
ncb.ncb_lana_num = adapterlist.lana [i];
strcpy ((char *) ncb.ncb_callname, "*");
memset (& adapter, 0, sizeof (adapter));
ncb.ncb_buffer = (unsigned char *) & adapter;
ncb.ncb_length = sizeof (adapter);
// get the adapter's info and, if this works, return it in standard,
// colon-delimited form.
if (netbios (& ncb) == 0)
{
std :: vector <unsigned char> v6;
v6.resize (6);
for (int i = 0; i <6; i ++)
v6 [i] = adapter.adapt.adapter_address [i];
if (v6 [0] == 0)
{
std :: list <std :: vector <unsigned char>> :: iterator i = mac.begin ();
for (; i! = mac.end (); i ++) if (* i == v6)
break;
if (i == mac.end ())
mac.push_back (v6);
}
}
else
break;
}
return 0;
}