Example #1
1
void GetMACaddress(char *mac_address)
{
	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
	sprintf(mac_address,"%02X:%02X:%02X:%02X:%02X:%02X", pAdapterInfo->Address[0],pAdapterInfo->Address[1],pAdapterInfo->Address[2],pAdapterInfo->Address[3],pAdapterInfo->Address[4],pAdapterInfo->Address[5]);
}
Example #2
0
int main(int argc, char** argv)
{
	WSADATA wsaData;
	PIP_ADAPTER_INFO pAdapterInfo = NULL, pAdapter = NULL;
	ULONG ulOutBufLen;
	u_char p[6];

	WSAStartup(MAKEWORD(2,2), &wsaData);

	if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
		free(pAdapterInfo);
		pAdapterInfo = (PIP_ADAPTER_INFO) malloc(ulOutBufLen);
	}
	GetAdaptersInfo(pAdapterInfo, &ulOutBufLen);
	pAdapter = pAdapterInfo;
	while(pAdapter) {
		printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
		printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
		memcpy(p, pAdapter->Address, 6);
		printf("\tAdapter Addr: \t%02X:%02X:%02X:%02X:%02X:%02X\n",
				p[0],p[1],p[2],p[3],p[4],p[5]);
		printf("\tIP Addr: \t%s\n", pAdapter->IpAddressList.IpAddress.String);
		printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);
		printf("\tIP Gateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
		if (pAdapter->DhcpEnabled) {
			printf("\tDHCP Enable: Yes\n");
			printf("\tLease Obtained: %ld\n", pAdapter->LeaseObtained);
		} else {
			printf("\tDHCP Enable: No\n");
		}
		if (pAdapter->HaveWins) {
			printf("\tHave Wins: Yes\n");
			printf("\t\tPrimary Wins Server: \t%s\n", pAdapter->PrimaryWinsServer.IpAddress.String);
			printf("\t\tSecondary Wins Server: \t%s\n", pAdapter->SecondaryWinsServer.IpAddress.String);
		} else {
			printf("\tHave Wins: No\n");
		}
		pAdapter = pAdapter->Next;
	}

	return 0;
}
Example #3
0
DWORD WINAPI CLuzj_ZTEDlg::GetMacIP(const char *adaptername, char *ip, unsigned char *mac)
{

	PIP_ADAPTER_INFO AdapterInfo = NULL;

	DWORD dwBufLen = sizeof(IP_ADAPTER_INFO);
	DWORD dwStatus;
	AdapterInfo = (PIP_ADAPTER_INFO)malloc(dwBufLen);
	if(AdapterInfo == NULL) return -1;
	dwStatus = GetAdaptersInfo(AdapterInfo,&dwBufLen);	
	if(dwStatus == ERROR_BUFFER_OVERFLOW) {
		free(AdapterInfo); 
		AdapterInfo = (PIP_ADAPTER_INFO)malloc(dwBufLen);
		dwStatus = GetAdaptersInfo(AdapterInfo,&dwBufLen);	
		if(AdapterInfo == NULL) return -1;
	}
	if(dwStatus != NO_ERROR) {
		if(AdapterInfo != NULL) free(AdapterInfo);
		return -2;
	}

		
	if(ip) memset(ip, 0, 16);	
	if(mac) memset(mac, 0, 6);

	PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;	
	if(adaptername != NULL) {			
		while(pAdapterInfo) {
			if (stricmp(adaptername,pAdapterInfo->AdapterName) == 0) {
				if(mac) memcpy(mac, pAdapterInfo->Address, 6);
				if(ip) strncpy(ip, pAdapterInfo->IpAddressList.IpAddress.String, 16);
				break;
			}
			pAdapterInfo = pAdapterInfo->Next;
		};
	}
	
	free(AdapterInfo);
	if(pAdapterInfo == NULL) return -3;
	
	return 0;
}
Example #4
0
//////////////////////////////////////////////////////
	//Anti Cheat
	char* getMAC(){// By Yuri-BR
    PIP_ADAPTER_INFO AdapterInfo;
    DWORD dwBufLen = sizeof(AdapterInfo);
    char *mac_addr = (char*)malloc(17);

    AdapterInfo = (IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO));
    if (AdapterInfo == NULL) 
    {
        printf("Error allocating memory needed to call GetAdaptersinfo\n");
    }

    // Make an initial call to GetAdaptersInfo to get the necessary size into the dwBufLen     variable
    if (GetAdaptersInfo(AdapterInfo, &dwBufLen) == ERROR_BUFFER_OVERFLOW) 
    {

        AdapterInfo = (IP_ADAPTER_INFO *) malloc(dwBufLen);
        if (AdapterInfo == NULL) 
        {
             printf("Error allocating memory needed to call GetAdaptersinfo\n");
        }
     }

    if (GetAdaptersInfo(AdapterInfo, &dwBufLen) == NO_ERROR) 
    {
        PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info
        do 
        {
            sprintf(mac_addr, "%02X:%02X:%02X:%02X:%02X:%02X", // By Yuri-BR
            pAdapterInfo->Address[0], pAdapterInfo->Address[1],
            pAdapterInfo->Address[2], pAdapterInfo->Address[3],
            pAdapterInfo->Address[4], pAdapterInfo->Address[5]);

            return mac_addr;

            printf("\n");
            pAdapterInfo = pAdapterInfo->Next;        
        }
        while(pAdapterInfo);                        
        }
        free(AdapterInfo);
}
Example #5
0
static TinyRet udp_join_multicast_group_with_all_ip(int fd, const char *group)
{
    IP_ADAPTER_INFO * pNextAdapter = NULL;
    IP_ADAPTER_INFO * ipAdaptersInfo = NULL;
    ULONG infolen = sizeof(IP_ADAPTER_INFO);

    ipAdaptersInfo = (IP_ADAPTER_INFO *)tiny_malloc(infolen);

    if (GetAdaptersInfo(ipAdaptersInfo, &infolen) == ERROR_BUFFER_OVERFLOW)
    {
        tiny_free(ipAdaptersInfo);
        ipAdaptersInfo = (IP_ADAPTER_INFO *)tiny_malloc(infolen);
    }

    if (GetAdaptersInfo(ipAdaptersInfo, &infolen))
    {
        tiny_free(ipAdaptersInfo);
        return TINY_RET_E_INTERNAL;
    }

    for (pNextAdapter = ipAdaptersInfo; pNextAdapter; pNextAdapter = pNextAdapter->Next)
    {
        IP_ADDR_STRING *pNextIp = NULL;
        for (pNextIp = &(pNextAdapter->IpAddressList); pNextIp; pNextIp = pNextIp->Next)
        {
            unsigned long ip = inet_addr(pNextIp->IpAddress.String);
            if (ip == 0)
            {
                break;
            }

            LOG_D(TAG, "join MultiGroup ip: %s", pNextIp->IpAddress.String);

            udp_join_multicast_group_with_ip(fd, group, ip);
        }
    }

    tiny_free(ipAdaptersInfo);

    return TINY_RET_OK;
}
Example #6
0
// 是否存在网关
STDMETHODIMP_(BOOL) CStatistic::IsNetGatewayExists(void)
{
    PIP_ADAPTER_INFO pAdapterInfo;
    PIP_ADAPTER_INFO pAdapter = NULL;

    BOOL bExists = FALSE;
    DWORD dwRetVal = 0;

    ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
    pAdapterInfo = (IP_ADAPTER_INFO *) malloc(ulOutBufLen);
    if(pAdapterInfo)
    {
        dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen);
        if(dwRetVal == ERROR_BUFFER_OVERFLOW )
        {
            free(pAdapterInfo);

            pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
            if(pAdapterInfo)
                dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen);
        }

        if( dwRetVal == NO_ERROR)
        {
            pAdapter = pAdapterInfo;
            while (pAdapter)
            {
                if(pAdapter->GatewayList.IpAddress.String[0])
                {
                    bExists = TRUE;
                    break;
                }
                pAdapter = pAdapter->Next;
            }
        }

        free(pAdapterInfo);
    }

    return bExists;
}
Example #7
0
char *macAddress(void)
{
	IP_ADAPTER_INFO *adapterInfo;
	ULONG adapterInfoSize = 0;

	if (GetAdaptersInfo(NULL, &adapterInfoSize) != ERROR_SUCCESS)
	{
		adapterInfo = (IP_ADAPTER_INFO *) malloc(adapterInfoSize);
	}

	if (GetAdaptersInfo(adapterInfo, &adapterInfoSize) != ERROR_SUCCESS)
	{
		return NULL;
	}

	{
		char *mac = String_asHex(adapterInfo->Address, adapterInfo->AddressLength);
		free(adapterInfo);
		return mac;
	}
}
int getAdaptersInfo()
{
        char MacAddressStr[256]; //mac address converted to a string
        char MacOneByteStr[10]; //used to hold one byte of mac address
        int retval = 0; //return -1 if no adapters found

        if (isIPHLPAvail())  //inits iphlpapi and returns true if dll loaded
        {
                //just return count if we already did this before
                if (AdapterCount)
                        return AdapterCount;

                IP_ADAPTER_INFO  *pAdapterInfo; //points to buffer hold linked list adapter info

                DWORD dwSize = (sizeof(IP_ADAPTER_INFO) * MAX_ADAPTERS) + sizeof(DWORD); //size for lots of adapters
                char *buffer = new char[dwSize];  //allocate space for lots of adapters
                if (buffer)
                {
                        pAdapterInfo = (IP_ADAPTER_INFO *)buffer;  //point to buffer
                        if (GetAdaptersInfo(
                                pAdapterInfo,  // buffer for mapping table
                                &dwSize) == NO_ERROR)                     // sort the table
                        {
                                while (pAdapterInfo)
                                {
                                        strcpy(adapters[AdapterCount].AdapterName, pAdapterInfo->Description);
                                        strcpy(adapters[AdapterCount].IpAddress, (const char *)pAdapterInfo->IpAddressList.IpAddress.String);

                                        //build mac address as a string
                                        *MacAddressStr = '\0';
                                        for (unsigned int loop = 0; loop < pAdapterInfo->AddressLength; loop++)
                                        {
                                                if (strlen(MacAddressStr))
                                                        strcat(MacAddressStr,"-");
                                                sprintf(MacOneByteStr,"%02X",pAdapterInfo->Address[loop]);
                                                strcat(MacAddressStr,MacOneByteStr);
                                        }
                                        strcpy((char *)adapters[AdapterCount].MacAddress, MacAddressStr);

                                        AdapterCount++;
                                        pAdapterInfo = pAdapterInfo->Next;
                                }

                                retval = AdapterCount;
                        }

                        delete [] buffer;
                }
        }

        return retval;
}
Example #9
0
const char* wyDevice::getDeviceId() {
	// Get the buffer length required for IP_ADAPTER_INFO.
	ULONG bufLen = 0;
	BYTE* buffer = 0;
	if(GetAdaptersInfo(0, &bufLen) == ERROR_BUFFER_OVERFLOW) {
		// Now the BufferLength contain the required buffer length.
		// Allocate necessary buffer.
		buffer = new BYTE[bufLen];

		// Get the Adapter Information.
		PIP_ADAPTER_INFO adapterInfo = reinterpret_cast<PIP_ADAPTER_INFO>(buffer);
		GetAdaptersInfo(adapterInfo, &bufLen);

		// Iterate the network adapters and print their MAC address.
		if(adapterInfo) {
			// Assuming pAdapterInfo->AddressLength is 6.
			sprintf(sIMEI, "%02x:%02x:%02x:%02x:%02x:%02x",
				adapterInfo->Address[0],
				adapterInfo->Address[1],
				adapterInfo->Address[2],
				adapterInfo->Address[3],
				adapterInfo->Address[4],
				adapterInfo->Address[5]);
		}

		// make md5 for mac address
		const char* md5 = wyMD5::md5(sIMEI);
		memcpy(sIMEI, md5, strlen(md5));
		wyFree((void*)md5);

		// release buffer
		delete[] buffer;

		// return
		return sIMEI;
	} else {
		return NULL;
	}
}
Example #10
0
void CIPFindDlg::OnCbnSelchangeCmbDevice()
{
	UpdateData(FALSE);

	int nCurSel = m_Device.GetCurSel();

	ULONG len = 0; 
	GetAdaptersInfo(NULL, &len);
	PIP_ADAPTER_INFO p = static_cast<PIP_ADAPTER_INFO>(malloc(len));
	GetAdaptersInfo(p, &len);

	int i=0;
	for (PIP_ADAPTER_INFO q = p; q != NULL; q = q->Next)
	{
		if (i++ == nCurSel)
		{
			GetCurSelIPMask(q->IpAddressList.IpAddress.String, q->IpAddressList.IpMask.String);
		}
	}

	free(p);
}
Example #11
0
bool mapport(short port)
{
	UPnP UPnPvar;

	PIP_ADAPTER_INFO pAdapterInfo = NULL;
	DWORD dwRetVal = 0;
	char strLocalIP[256];
	
	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 ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
	{
		strcpy(strLocalIP,pAdapterInfo->IpAddressList.IpAddress.String);
	}
	else 
	{
		strcpy(strLocalIP,"");
	}
	
	free(pAdapterInfo);


	UPnPvar.Set_UPnP(strLocalIP,"TCP","UVNC",port);
	UPnPvar.OpenPorts(true);
	char testchar[256];
	strcpy(testchar,UPnPvar.GetExternalIP());
	UPnPvar.ClosePorts(true);
	return 0;
}
Example #12
0
// 取得所有网卡的信息 David 2010.6.2 add
PIP_ADAPTER_INFO GetAllAdaptersInfo()
{
	PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
	ASSERT(NULL != pAdapterInfo);
	ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);

	// 空间不够则重新分配空间
	if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
	{
		free(pAdapterInfo);
		pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen); 
	}

	if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == NO_ERROR){
			
		return pAdapterInfo;
	}
	else
	{
		free(pAdapterInfo);
		return NULL;
	}
}
Example #13
0
vector<ULONG>* SocketExtension::LocalIPs()
{
	PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
	unsigned long stSize = sizeof(IP_ADAPTER_INFO);
	int nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
	if (ERROR_BUFFER_OVERFLOW == nRel)
	{
		delete pIpAdapterInfo;
		pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
		nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
	}
	vector<ULONG>* address = NULL;
	if (ERROR_SUCCESS == nRel)
	{
		while (pIpAdapterInfo)
		{
			IP_ADDR_STRING *pIpAddrString = &(pIpAdapterInfo->IpAddressList);
			do
			{
				ULONG addrnum = inet_addr(pIpAddrString->IpAddress.String);
				if (addrnum != 0)
				{
					if (address == NULL)
					{
						address = new vector<ULONG>;
					}
					address->push_back(addrnum);
				}
				pIpAddrString = pIpAddrString->Next;
			} while (pIpAddrString);
			pIpAdapterInfo = pIpAdapterInfo->Next;
		}
	}
	if (pIpAdapterInfo)
		delete pIpAdapterInfo;
	return address;
}
Example #14
0
int ipaddr_mac_cmp(const char *input_addr) 
{
	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);

	dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) ;
	if ( dwRetVal != ERROR_SUCCESS) 	{
		free (pAdapterInfo);
		pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
	}
	if((dwRetVal=GetAdaptersInfo(pAdapterInfo ,&ulOutBufLen))==NO_ERROR){
		pAdapter= pAdapterInfo;
		while(pAdapter)	{
			char mac_buf[128] ;
			char *p = mac_buf ;
			for(UINT i=0;i<pAdapter->AddressLength;i++)	{
				p +=snprintf(p,128 , "%02x-" , pAdapter->Address[i]) ;
			}
			--p ;
			*p = 0 ;
			if (0==ndstricmp((char*)mac_buf,(char*) input_addr)){
				return 0 ;
			}
			pAdapter=pAdapter->Next;
		}
	}
	else {
		nd_logerror("last error  :%s\n" AND nd_last_error()) ;
	}

	free (pAdapterInfo);
	return -1;
}
Example #15
0
void EnvironmentImpl::nodeIdImpl(NodeId& id)
{
	std::memset(&id, 0, sizeof(id));

	PIP_ADAPTER_INFO pAdapterInfo;
	PIP_ADAPTER_INFO pAdapter = 0;
	ULONG len    = sizeof(IP_ADAPTER_INFO);
	pAdapterInfo = reinterpret_cast<IP_ADAPTER_INFO*>(new char[len]);
	// Make an initial call to GetAdaptersInfo to get
	// the necessary size into len
	DWORD rc = GetAdaptersInfo(pAdapterInfo, &len);
	if (rc == ERROR_BUFFER_OVERFLOW)
	{
		delete [] reinterpret_cast<char*>(pAdapterInfo);
		pAdapterInfo = reinterpret_cast<IP_ADAPTER_INFO*>(new char[len]);
	}
	else if (rc != ERROR_SUCCESS)
	{
		return;
	}
	if (GetAdaptersInfo(pAdapterInfo, &len) == NO_ERROR)
	{
		pAdapter = pAdapterInfo;
		bool found = false;
		while (pAdapter && !found)
		{
			if (pAdapter->Type == MIB_IF_TYPE_ETHERNET && pAdapter->AddressLength == sizeof(id))
			{
				found = true;
				std::memcpy(&id, pAdapter->Address, pAdapter->AddressLength);
			}
			pAdapter = pAdapter->Next;
		}
	}
	delete [] reinterpret_cast<char*>(pAdapterInfo);
}
Example #16
0
unsigned __int64 FillAdaptersInfo(unsigned int *pRet2)
{
	IP_ADAPTER_INFO AdapterInfo[16], *pAdapter;
	ULONG uBufLen = sizeof(AdapterInfo);
	__int64 ret = 0;

	if (GetAdaptersInfo(AdapterInfo, &uBufLen) == ERROR_SUCCESS)
	{
		for (pAdapter = AdapterInfo; pAdapter; pAdapter = pAdapter->Next)
		{
			if (pAdapter->AddressLength == 6 && pAdapter->Type == MIB_IF_TYPE_ETHERNET)
				ret ^= BytesSHA1I64(pAdapter->Address, pAdapter->AddressLength);
		}
	}
	return ret;
}
Example #17
0
int NetUtils::FindNumberOfLocalNetworkInterfaces( void )
{
    PIP_ADAPTER_INFO pAdapterInfo = new IP_ADAPTER_INFO;
    unsigned long output_buffer_len = sizeof(IP_ADAPTER_INFO);

    // Make call to GetAdaptersInfo to get number of addapters
    DWORD ret = GetAdaptersInfo( pAdapterInfo, &output_buffer_len );
    delete pAdapterInfo;
    if( (ret == ERROR_BUFFER_OVERFLOW) || (ret == ERROR_SUCCESS) ) {
		int nif = output_buffer_len / sizeof(IP_ADAPTER_INFO);
		if( output_buffer_len > (nif * sizeof(IP_ADAPTER_INFO)) )
			nif++;
        return nif;
    }
    fprintf( stderr, "FindNumberOfLocalNetworkInterfaces() failed\n" );
    return -1;
}
Example #18
0
bool GetMac(std::vector<unsigned char>& mac)
{
    IP_ADAPTER_INFO AdapterInfo[16];       // Allocate information for 16 cards
    DWORD dwBufLen = sizeof(AdapterInfo);  // Save memory size of buffer

    DWORD dwStatus = GetAdaptersInfo ( AdapterInfo, &dwBufLen); // Get info
                if (dwStatus != NO_ERROR) return wxEmptyString; // Check status
	for(size_t i = 0; i<sizeof(AdapterInfo); i++) {
		mac.resize(AdapterInfo[i].AddressLength);
		mac.assign(AdapterInfo[i].Address, AdapterInfo[i].Address + AdapterInfo[i].AddressLength);
		for (size_t j=0; j< mac.size(); j++) {
			if (mac[j] != 0) {
				return true;
			}
		}
	}
	return false;
}
inline long MACAddressUtility::GetMACAddressMSW(unsigned char * result)
{

#if defined(UNDER_CE)
	IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information
	DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer
	if(GetAdaptersInfo(AdapterInfo, &dwBufLen) == ERROR_SUCCESS)
	{
		memcpy(result, AdapterInfo->Address, 6);
	}
	else return -1;
#else
	UUID uuid;
	if(UuidCreateSequential(&uuid) == RPC_S_UUID_NO_ADDRESS) return -1;
	memcpy(result, (char*)(uuid.Data4+2), 6);
#endif
	return 0;
}
Example #20
0
/**
 * Retrieve the MAC address of the system
 */
unsigned pixie_get_mac_address(unsigned char macaddr[6])
{
	memset(macaddr, 0, 6);
#ifdef WIN32
	{
		DWORD dwStatus;
		IP_ADAPTER_INFO *p;
		IP_ADAPTER_INFO AdapterInfo[16];
		DWORD dwBufLen = sizeof(AdapterInfo);
		DWORD interface_index = -1;

		GetBestInterface(0x01010101, &interface_index);
		
		dwStatus = GetAdaptersInfo(AdapterInfo, &dwBufLen);
		if (dwStatus != ERROR_SUCCESS)
			  return 1;

		for (p=AdapterInfo; p; p = p->Next) {

			if (p->Index == interface_index || interface_index == -1) {
				memcpy(macaddr, p->Address, 6);
				return 0;
			}
			/*(
			printf("[%02x:%02x:%02x:%02x:%02x:%02x]\n",
			mac_address[0], mac_address[1], mac_address[2], 
			mac_address[3], mac_address[4], mac_address[5]
			);
			printf("    %s\n", p->AdapterName);
			printf("    %s\n", p->Description);
			printf("    IP: ");
			for (a = &p->IpAddressList; a; a = a->Next) {
				printf("%s ", a->IpAddress.String);
			}
			printf("\n");
			*/
		}
	}
#else
	return -1;
#endif
	return -1;
}
Example #21
0
//
// Function:	Iterate through all network adapters, for call the callback routine with adapter information
//
void enumAdapters( std::function<bool(IP_ADAPTER_INFO&)> callback )
{
	// 20 adapaters on one machine is enough!
	IP_ADAPTER_INFO rgInfo[20];
	DWORD size = sizeof(rgInfo);
	DWORD result;

	result = GetAdaptersInfo( rgInfo, &size );
	if( result != ERROR_SUCCESS ) {
		throw Win32Exception(result, "GetAdaptersInfo");
	}

	bool totalOption15 = false;
	for( IP_ADAPTER_INFO* pinfo = rgInfo; pinfo && !totalOption15; pinfo = pinfo->Next ) {
		bool cont = callback( *pinfo );
		if( !cont )
			break;
	}
}
/* returns the subnet mask in network byte order */
static uint32_t getIpMaskForIpAddress(
    uint32_t ipAddress)
{
    /* Allocate information for up to 16 NICs */
    IP_ADAPTER_INFO AdapterInfo[16];
    /* Save memory size of buffer */
    DWORD dwBufLen = sizeof(AdapterInfo);
    uint32_t ipMask = INADDR_BROADCAST;
    bool found = false;

    PIP_ADAPTER_INFO pAdapterInfo;

    /* GetAdapterInfo:
       [out] buffer to receive data
       [in] size of receive data buffer */
    DWORD dwStatus = GetAdaptersInfo(AdapterInfo,
        &dwBufLen);
    if (dwStatus == ERROR_SUCCESS) {
        /* Verify return value is valid, no buffer overflow
           Contains pointer to current adapter info */
        pAdapterInfo = AdapterInfo;

        do {
            IP_ADDR_STRING *pIpAddressInfo = &pAdapterInfo->IpAddressList;
            do {
                unsigned long adapterAddress =
                    inet_addr(pIpAddressInfo->IpAddress.String);
                unsigned long adapterMask =
                    inet_addr(pIpAddressInfo->IpMask.String);
                if (adapterAddress == ipAddress) {
                    ipMask = adapterMask;
                    found = true;
                }
                pIpAddressInfo = pIpAddressInfo->Next;
            } while (pIpAddressInfo && !found);
            /* Progress through linked list */
            pAdapterInfo = pAdapterInfo->Next;
            /* Terminate on last adapter */
        } while (pAdapterInfo && !found);
    }

    return ipMask;
}
Example #23
0
bool NetManager::SelectAdapter(int index)
{
	// get adapter
	m_adapter = m_deviceList;
	for (int i = 0; i < index; i++)
	{
		m_adapter = m_adapter->next;
		if (m_adapter == nullptr)
			return false;
	}

	// get adapter infomation
	CString ip, gateway;
	MacAddress mac;

	IP_ADAPTER_INFO adapterInfo[16];
	DWORD bufSize = sizeof(adapterInfo);
	DWORD status = GetAdaptersInfo(adapterInfo, &bufSize);
	if (status != ERROR_SUCCESS)
		return false;

	CString name = m_adapter->name;
	for (PIP_ADAPTER_INFO pInfo = adapterInfo; pInfo != nullptr; pInfo = pInfo->Next)
	{
		if (name.Find(pInfo->AdapterName) != -1)
		{
			ip = pInfo->IpAddressList.IpAddress.String;
			mac = *(MacAddress*)pInfo->Address;
			gateway = pInfo->GatewayList.IpAddress.String;
			break;
		}
	}
	if (ip == "")
		return false;

	// fill variables
	m_selfIp = ip;
	m_selfMac = mac;
	m_selfGateway = gateway;

	return true;
}
Example #24
0
/**
*   Obtain the MAC address of the local host...
*
*/
BOOL CPortScannerDlg::GetMacAddress()
{
	IP_ADAPTER_INFO adapter[5];  //Maximum 5 adapters

	DWORD buflen=sizeof(adapter);

	DWORD status=GetAdaptersInfo(adapter,&buflen);

	if(status==ERROR_SUCCESS)
	{
	
	PIP_ADAPTER_INFO painfo=adapter;
    memcpy(packet->hostmac,painfo->Address,6);

	return TRUE;
	}


return FALSE;	
}
Example #25
0
bool WindowsTimestamper::HWTimestamper_init( InterfaceLabel *iface_label, OSNetworkInterface *net_iface ) {
	char network_card_id[64];
	LinkLayerAddress *addr = dynamic_cast<LinkLayerAddress *>(iface_label);
	if( addr == NULL ) return false;
	PIP_ADAPTER_INFO pAdapterInfo;
	IP_ADAPTER_INFO AdapterInfo[32];       // Allocate information for up to 32 NICs
	DWORD dwBufLen = sizeof(AdapterInfo);  // Save memory size of buffer

	DWORD dwStatus = GetAdaptersInfo( AdapterInfo, &dwBufLen );
	if( dwStatus != ERROR_SUCCESS ) return false;

	for( pAdapterInfo = AdapterInfo; pAdapterInfo != NULL; pAdapterInfo = pAdapterInfo->Next ) {
		if( pAdapterInfo->AddressLength == ETHER_ADDR_OCTETS && *addr == LinkLayerAddress( pAdapterInfo->Address )) { 
			break;
		}
	}

	if( pAdapterInfo == NULL ) return false;

	if( strstr( pAdapterInfo->Description, NANOSECOND_CLOCK_PART_DESCRIPTION ) != NULL ) {
		netclock_hz.QuadPart = NETCLOCK_HZ_NANO;
	} else {
		netclock_hz.QuadPart = NETCLOCK_HZ_OTHER;
	}
	fprintf( stderr, "Adapter UID: %s(%s)\n", pAdapterInfo->AdapterName, pAdapterInfo->Description+(strlen(pAdapterInfo->Description)-7));
	PLAT_strncpy( network_card_id, NETWORK_CARD_ID_PREFIX, 63 );
	PLAT_strncpy( network_card_id+strlen(network_card_id), pAdapterInfo->AdapterName, 63-strlen(network_card_id) );

	miniport = CreateFile( network_card_id,
		GENERIC_READ | GENERIC_WRITE,
		FILE_SHARE_READ | FILE_SHARE_WRITE,
		NULL, OPEN_EXISTING, 0, NULL );
	if( miniport == INVALID_HANDLE_VALUE ) return false;

	tsc_hz.QuadPart = getTSCFrequency( 1000 );
	if( tsc_hz.QuadPart == 0 ) {
		return false;
	}

	return true;
}
Example #26
0
/**
	@brief
	Get the gateway of a given ip. Only for windows

	@details
	For example for ip 192.168.1.10 the gateway is 192.168.1.1
*/
bool utils :: get_gateway(struct in_addr ip , char *sgatewayip , int *gatewayip)
{
	char pAdapterInfo[5000];

	PIP_ADAPTER_INFO  AdapterInfo;

	ULONG OutBufLen = sizeof(pAdapterInfo) ;

	GetAdaptersInfo((PIP_ADAPTER_INFO) pAdapterInfo, &OutBufLen);
	for(AdapterInfo = (PIP_ADAPTER_INFO)pAdapterInfo; AdapterInfo ; AdapterInfo = AdapterInfo->Next)
	{
		if(ip.s_addr == inet_addr(AdapterInfo->IpAddressList.IpAddress.String))
		{
			strcpy(sgatewayip , AdapterInfo->GatewayList.IpAddress.String);
		}
	}

	*gatewayip = inet_addr(sgatewayip);

	return true;
}
Example #27
0
void		Client::getMACAddress(void)
{
	bool	macIsSet = false;
	IP_ADAPTER_INFO AdapterInfo[16];
	DWORD dwBufLen = sizeof(AdapterInfo);
	DWORD dwStatus = GetAdaptersInfo(AdapterInfo, &dwBufLen);
	if (dwStatus == ERROR_SUCCESS)
	{
		PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;

		while (pAdapterInfo && !macIsSet)
		{
			if (isValidMac(pAdapterInfo))
			{
				m_MAC = addrToString(pAdapterInfo->Address);
				macIsSet = true;
			}
			pAdapterInfo = pAdapterInfo->Next;
		}
	}
}
Example #28
0
	string cHWID::Get()
	{
		char data[4096];
		ZeroMemory(data, 4096);
		unsigned long  len = 4000;
		PIP_ADAPTER_INFO pinfo = (PIP_ADAPTER_INFO)data;
		char sbuf[20];
		string sret;

		DWORD ret = GetAdaptersInfo(pinfo, &len);
		if (ret != ERROR_SUCCESS)
			return string(/*NULL*/XorStr<0xB3, 5, 0xFA4DE0F4>("\xFD\xE1\xF9\xFA" + 0xFA4DE0F4).s);

		for (int k = 0; k < 5; k++) {
			sprintf(sbuf, /*%02X-*/XorStr<0xED, 6, 0x6E0543B0>("\xC8\xDE\xDD\xA8\xDC" + 0x6E0543B0).s, pinfo->Address[k]);
			sret += sbuf;
		}
		sprintf(sbuf, /*%02X*/XorStr<0x2D, 5, 0xE1F8C9CD>("\x08\x1E\x1D\x68" + 0xE1F8C9CD).s, pinfo->Address[5]);
		sret += sbuf;

		return(sret);
	}
Example #29
0
int MqttHal_GetNetworkIntfaceMAC(char *_ifname, char* _ifmac)
{
	#if defined(WIN32) //windows
	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
	//display mac address
	//printf("Mac : %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2], pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]);
	sprintf(_ifmac, "%02x%02x%02x%02x%02x%02x", pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2], pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]);
	#else
	int fd;
	struct ifreq ifr;
	char *iface = _ifname;
	unsigned char *mac = NULL;

	memset(&ifr, 0, sizeof(ifr));

	fd = socket(AF_INET, SOCK_DGRAM, 0);

	ifr.ifr_addr.sa_family = AF_INET;
	strncpy(ifr.ifr_name , iface , IFNAMSIZ-1);

	if (0 == ioctl(fd, SIOCGIFHWADDR, &ifr)) {
		mac = (unsigned char *)ifr.ifr_hwaddr.sa_data;
		//display mac address
		//printf("Mac : %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n" , mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
		sprintf(_ifmac, "%02x%02x%02x%02x%02x%02x" , mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
	}
	close(fd);

	return 0;
	#endif
}
void CFTLNetTester::dump_allAdaptersInfo()
{
    //显示所有 Enable 的网络适配器的地址信息(注意:Disable的无法获取)
    BOOL bRet = FALSE;
    IP_ADAPTER_INFO AdapterInfo[16] = { NULL };
    DWORD dwBufLen = sizeof(AdapterInfo);

    DWORD adpIndex = 0;
    DWORD dwStatus = 0;
    API_VERIFY(ERROR_SUCCESS == (dwStatus = GetAdaptersInfo(AdapterInfo, &dwBufLen)));
    if (bRet)
    {
        PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
        while (pAdapterInfo)
        {
            FTLASSERT(pAdapterInfo->ComboIndex == pAdapterInfo->Index); //TODO:实测这两个值一样, 有什么区别?

            adpIndex++;
            //将16进制的Mac地址转换为易读的方式
            LONG nStrBinaryCount = 0;
            API_VERIFY(CFConvUtil::HexFromBinary(pAdapterInfo->Address, pAdapterInfo->AddressLength, NULL, &nStrBinaryCount, _T('-')));
            CFMemAllocator<TCHAR> AddressBuf(nStrBinaryCount);
            API_VERIFY(CFConvUtil::HexFromBinary(pAdapterInfo->Address, pAdapterInfo->AddressLength, AddressBuf.GetMemory(), &nStrBinaryCount, _T('-')));

            FTLTRACE(TEXT("[%d]:ComboIdx=%d, Idx=%d,Type=%d Desc=%s, AdapterName=%s, AddressLength=%d, Address=%s\n"),
                     adpIndex,
                     pAdapterInfo->ComboIndex,
                     pAdapterInfo->Index,
                     pAdapterInfo->Type, //目前实测都是 6, TODO: 具体对应的枚举
                     CFConversion().MBCS_TO_TCHAR(pAdapterInfo->Description),    //描述信息, 如: Realtek PCIe GBE Family Controller
                     CFConversion().MBCS_TO_TCHAR(pAdapterInfo->AdapterName),    //GUID, 如 {6CF21E5D-0708-4F63-903E-47208B4F51EB}
                     pAdapterInfo->AddressLength, AddressBuf.GetMemory());       //MAC地址(Address)的16位表示, 如: 8c-89-a5-3d-6d-d7

            //其他可以获取到IP地址等
            pAdapterInfo = pAdapterInfo->Next;
        }
    }
}