获得网卡MAC地址c代码(linux)
- /*
* get network adapter's mac address
* @ifname [IN] interface name(eg. eth0)
* @mac [OUT] output mac address to it
*/ - static int get_mac_addr( const char *ifname, unsigned char *mac )
- {
- int sock ;
- int ret;
- struct ifreq ifr;
- sock = socket( AF_INET, SOCK_STREAM, 0 );
- if( sock < 0 ) return -1;
- memset( &ifr, 0, sizeof(ifr) );
- strcpy( ifr.ifr_name, ifname );
- ret = ioctl( sock, SIOCGIFHWADDR, &ifr, sizeof(ifr) );
- if( ret == 0 )
- {
- memcpy( mac, ifr.ifr_ifru.ifru_hwaddr.sa_data , 6 );
- }
- close( sock );
- return ret;
- }
获得网卡MAC地址c代码(Windows,VC)
- #include <Iphlpapi.h>
- /*
- * 获得网卡mac地址
- */
- int get_mac_addr( char *ifname, unsigned char *mac )
- {
- PIP_ADAPTER_INFO pAdapterInfo;
- PIP_ADAPTER_INFO pAdapter = NULL;
- DWORD dwRetVal = 0;
- pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
- ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
- // Make an initial call to GetAdaptersInfo to get
- // the necessary size into the ulOutBufLen variable
- if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
- {
- free(pAdapterInfo);
- pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
- if (pAdapterInfo == NULL)
- {
- printf("Error allocating memory needed to call GetAdaptersinfo/n");
- return -1;
- }
- } else return -1 ;
- if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
- {
- while(*name != '{') name++;
- pAdapter = pAdapterInfo;
- while (pAdapter)
- {
- if( !strncmp( (char*)name,pAdapter->AdapterName, 255 ) )
- {
- memcpy( mac, pAdapter->Address, 6 );
- return 0 ;
- }
- // Get next adapter info.
- pAdapter = pAdapter->Next ;
- }
- }
- return -1;
- }