Получение Mac адреса. С++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 11 Apr 2007.

  1. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Недавно был спор о том как получить 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;
    }
     
  2. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    эт ты писал?)
     
  3. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    Я вобщем-то здесь случайно, но коли уж здесь: вовсе не сложно составить 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)
    
     
  4. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    KSURi, тут тебе root/Administrator права надо. А вот в первом случае зависит от либы )
     
  5. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    (c)softtime.ru :D
    Great: :p
     
  6. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    Знаю, знаю) Но если это не трой/что-то подобное, то не вижу проблемы..