PDA

Просмотр полной версии : Получение Mac адреса. С++


Isis
11.04.2007, 23:30
Недавно был спор о том как получить MAC адрес ...
На С++ , с помощью библиотеки iphlpapi.dll

#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;
}

_Great_
12.04.2007, 08:05
эт ты писал?)

KSURi
12.04.2007, 23:43
Я вобщем-то здесь случайно, но коли уж здесь: вовсе не сложно составить ARP пакет, отправить его и получить ответ с МАК адресом. Я делал это на Perl, на Си еще легче выглядит.
Не мой код:

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)

nerezus
13.04.2007, 09:30
KSURi, тут тебе root/Administrator права надо. А вот в первом случае зависит от либы )

Isis
13.04.2007, 14:14
(c)softtime.ru :D
Great: :p

KSURi
13.04.2007, 16:05
KSURi, тут тебе root/Administrator права надо. А вот в первом случае зависит от либы )
Знаю, знаю) Но если это не трой/что-то подобное, то не вижу проблемы..