Недавно был спор о том как получить MAC адрес ... На С++ , с помощью библиотеки iphlpapi.dll Code: #include <windows.h> #include <iphlpapi.h> #include <stdio.h> int main() { // Указатель на функцию GetAdaptersInfo typedef DWORD(CALLBACK* PTR_GETADAPTERSINFO)(PIP_ADAPTER_INFO,PULONG); // Обращение iphlpapi.dll HINSTANCE iphlpapi; iphlpapi=LoadLibrary("iphlpapi.dll"); if(!iphlpapi) { printf ("iphlpapi.dll not found\n"); return (1); } PTR_GETADAPTERSINFO GetAdaptersInfo; GetAdaptersInfo = (PTR_GETADAPTERSINFO)GetProcAddress(iphlpapi, "GetAdaptersInfo"); ULONG adapter_info_size = 0; PIP_ADAPTER_INFO ptr_adapter_info = NULL; PIP_ADAPTER_INFO ptr_adapter_info_first = NULL; GetAdaptersInfo( ptr_adapter_info, &adapter_info_size ); ptr_adapter_info_first = ptr_adapter_info = (PIP_ADAPTER_INFO) new( char[adapter_info_size] ); if ( GetAdaptersInfo( ptr_adapter_info, &adapter_info_size ) != ERROR_SUCCESS) { printf( "Error while GetAdaptersInfo\n" ); delete( ptr_adapter_info ); return( 1 ); } while( ptr_adapter_info ) { printf ( "ID of adapter: %s\n", ptr_adapter_info->AdapterName ); printf ( "Description: %s\n", ptr_adapter_info->Description ); printf ( "MAC address: " ); for( char i=0; i < (int)ptr_adapter_info->AddressLength; i++) { printf ("%02x ", (unsigned char)ptr_adapter_info->Address[i]); } printf ("\n"); printf ("Adapter type: %u\n\n", ptr_adapter_info->Type ); ptr_adapter_info = ptr_adapter_info->Next; } delete( ptr_adapter_info_first ); char a = getchar(); return 0; }
Я вобщем-то здесь случайно, но коли уж здесь: вовсе не сложно составить ARP пакет, отправить его и получить ответ с МАК адресом. Я делал это на Perl, на Си еще легче выглядит. Не мой код: Code: char pkt[]= // Ethernet заголовок "\xff\xff\xff\xff\xff\xff" // Широковещательный адрес "AAAAAA" // Отправитель "\x08\x06" // Тип пакета (ARP) // ARP заголовок "\x00\x01" // Тип hAddr (Ethernet) "\x08\x00" // Протокол pAddr (IP) "\x06" // Размер hAddr (hLen) "\x04" // Размер прокола (pLen) "\x00\x02" // ARP опкод (REPLY) "AAAAAA" // Mac отправитель (41:41:41:41:41:41) "AAAA" // IP отправитель (65.65.65.65) "AAAAAA" // Mac точки назначения (41:41:41:41:41:41) "AAAA" // IP точки назначения (65.65.65.65)