代码如下 | 复制代码 |
class getmacaddr function forwindows() function forlinux() |
//方法二
代码如下 | 复制代码 |
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...mac "); 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)) { printf("mac ioctl error "); 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 ",mac_addr); close( sock_mac ); return qstring( mac_addr ); } |
//用c实现的
代码如下 | 复制代码 |
int getalllocaladaptermacaddr(std::list<:vector 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(&ncb);
mac.resize(0);
for (int i = 0; i { struct astat { adapter_status adapt; name_buffer ps教程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 v6.resize(6); for (int i=0; i v6[i] = adapter.adapt.adapter_address[i]; if (v6[0] == 0) { std::list<:vector 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; } |