Exemplo n.º 1
0
// 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;
}