// Fetches the MAC address and prints it void GetNetConfig::print(void) { IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs DWORD dwBufLen = sizeof(AdapterInfo); // Save the memory size of buffer DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo AdapterInfo, // [out] buffer to receive data &dwBufLen); // [in] size of receive data buffer assert(dwStatus == ERROR_SUCCESS); // Verify return value is valid, no buffer overflow PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info do { GetInterfaceName(pAdapterInfo->AdapterName); GetMACaddress(pAdapterInfo->Address); if (((m_nMatches & pt_ifname) != pt_ifname || ((m_nMatches & pt_ifname) == pt_ifname && strcmp(m_szCheck_IntefaceName, m_szIntefaceName) == 0)) && ((m_nMatches & pt_mac) != pt_mac || ((m_nMatches & pt_mac) == pt_mac && strcmp(m_szCheck_MAC_Address, m_szMAC_Address) == 0 )) && ((m_nMatches & pt_ipv4) != pt_ipv4 || ((m_nMatches & pt_ipv4) == pt_ipv4 && strcmp(m_szCheck_IP_Address, pAdapterInfo->IpAddressList.IpAddress.String) == 0 )) && ((m_nMatches & pt_mask) != pt_mask || ((m_nMatches & pt_mask) == pt_mask && strcmp(m_szCheck_MASK_Address, pAdapterInfo->IpAddressList.IpMask.String) == 0 )) && ((m_nMatches & pt_gateway) != pt_gateway || ((m_nMatches & pt_gateway) == pt_gateway && strcmp(m_szCheck_Gateway_Address, pAdapterInfo->GatewayList.IpAddress.String) == 0 )) && ((m_nMatches & pt_dns) != pt_dns || ((m_nMatches & pt_dns) == pt_dns && FindDNSAddress(pAdapterInfo) == TRUE )) ) { PrintInterfaceName(); PrintAdapterInfo(pAdapterInfo); } pAdapterInfo = pAdapterInfo->Next; // Progress through linked list } while(pAdapterInfo); // Terminate if last adapter }
// // Function: LanaStatus // // Description: // Perform a LAN adapter status command. // int LanaStatus(int lana, char *name) { NCB ncb; MESSAGE_BUFFER mb; ZeroMemory(&mb, sizeof(MESSAGE_BUFFER)); ZeroMemory(&ncb, sizeof(NCB)); memset(ncb.ncb_callname, ' ', NCBNAMSZ); // // Check command line options to see if the call is // made locally or remotely. // if ((bLocalName == FALSE) && (bRemoteName == FALSE)) ncb.ncb_callname[0] = '*'; else strncpy(ncb.ncb_callname, name, strlen(name)); ncb.ncb_command = NCBASTAT; ncb.ncb_buffer = (UCHAR *)&mb; ncb.ncb_length = sizeof(MESSAGE_BUFFER); ncb.ncb_lana_num= lana; if (Netbios(&ncb) != NRC_GOODRET) { printf("Netbios: NCBASTAT failed: %d\n", ncb.ncb_retcode); return ncb.ncb_retcode; } PrintAdapterInfo(lana, mb.adapter); PrintNameInfo(mb.names, mb.adapter.name_count); return NRC_GOODRET; }