Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Elenca Mac Address - main.c

main.c

Caricato da: AldoBaldo
Scarica il programma completo

  1. #include <windows.h>
  2. #include <Iphlpapi.h>
  3. #include <stdio.h>
  4.  
  5. #define MAX_MCADDDFLT  16 // 16 dovrebbero essere piu' che sufficienti, ma
  6.                           // caso mai non bastassero e' previsto un meccanismo
  7.                           // dinamico per l'allocazione di un buffer di
  8.                           // dimensioni adeguate
  9.  
  10. const char *kNomeFileOutput = "elenco mac address.txt";
  11.  
  12. int esci( const char *msg );
  13.  
  14. int main() {
  15.     DWORD e = ERROR_BUFFER_OVERFLOW, dwBufLen = 0;
  16.     UINT qMcAdd = 0, maxMcAdd = MAX_MCADDDFLT;
  17.     PIP_ADAPTER_INFO pAdapterInfo = NULL;
  18.     IP_ADAPTER_INFO *aAdapterInfo = NULL;
  19.     FILE *f = NULL;
  20.  
  21.     f = fopen( kNomeFileOutput, "r" );
  22.     if( f ) { fclose( f ); return esci( "file output gia' esistente" ); }
  23.  
  24.     while( e==ERROR_BUFFER_OVERFLOW ) {
  25.         // crea il buffer destinato a ricevere i dati da GetAdaptersInfo()
  26.         if( aAdapterInfo ) free( aAdapterInfo );
  27.         aAdapterInfo = calloc( maxMcAdd, sizeof(*aAdapterInfo) );
  28.         if( !aAdapterInfo ) return esci( "memoria insufficiente" );
  29.  
  30.         dwBufLen = sizeof(*aAdapterInfo)*maxMcAdd; // [in] dimensioni del buffer
  31.  
  32.         e = GetAdaptersInfo( aAdapterInfo, &dwBufLen );
  33.  
  34.         if( ERROR_BUFFER_OVERFLOW == e ) { ++maxMcAdd; continue; }
  35.  
  36.         if( e != ERROR_SUCCESS )
  37.             { free( aAdapterInfo ); return esci( "adapter non rilevati" ); }
  38.     }
  39.  
  40.     f = fopen( kNomeFileOutput, "w+" );
  41.     if( !f ) { free( aAdapterInfo ); return esci( "file output non aperto" ); }
  42.  
  43.     pAdapterInfo = aAdapterInfo; // puntatore all'adapter info corrente
  44.  
  45.     for( qMcAdd=0; pAdapterInfo && qMcAdd<maxMcAdd; ++qMcAdd ) {
  46.         UINT i, lMcAdd;
  47.  
  48.         /// SCRIVE NEL FILE
  49.         // quantita' dei caratteri del "nome"
  50.         fprintf( f, "%d\t", lstrlen(pAdapterInfo->AdapterName) );
  51.         // "nome" dell'adapter
  52.         fprintf( f, "%s\t", pAdapterInfo->AdapterName );
  53.         // quantita' dei caratteri del Mac Address
  54.         lMcAdd = pAdapterInfo->AddressLength;
  55.         fprintf( f, "%d\t", 2*lMcAdd );
  56.         // sequenza esadecimale del Mac Address
  57.         for( i=0; i<lMcAdd&&i<MAX_ADAPTER_ADDRESS_LENGTH; ++i )
  58.             fprintf( f, "%02X", pAdapterInfo->Address[i] );
  59.         // quantita' dei caratteri della descrizione
  60.         fprintf( f, "\t%d\t", lstrlen(pAdapterInfo->Description) );
  61.         // descrizione dell'adapter
  62.         fprintf( f, "%s", pAdapterInfo->Description );
  63.  
  64.         /// SCRIVE IN CONSOLE
  65.         // descrizione dell'adapter
  66.         printf( "%s\n", pAdapterInfo->Description );
  67.         // nome dell'adapter
  68.         printf( "%s\n", pAdapterInfo->AdapterName );
  69.         // Mac Address dell'adapter
  70.         printf( "Mac Address: 0x" );
  71.         for( i=0; i<lMcAdd&&i<MAX_ADAPTER_ADDRESS_LENGTH; ++i )
  72.             printf( "%02X", pAdapterInfo->Address[i] );
  73.  
  74.         pAdapterInfo = pAdapterInfo->Next; // prossimo Mac Address nella lista
  75.  
  76.         // mettiamo gli "a capo" nel file e in console
  77.         fprintf( f, (pAdapterInfo&&(qMcAdd!=(maxMcAdd-1)))?"\n":"" );
  78.         printf( "\n\n" );
  79.     }
  80.  
  81.     fclose( f ); f = NULL;
  82.     free( aAdapterInfo ); aAdapterInfo = NULL;
  83.     puts( "Operazione riuscita.\n" );
  84.  
  85.     printf( "Il file \"%s\" ", kNomeFileOutput );
  86.  
  87.     if( qMcAdd )
  88.         printf( " contiene ora un elenco di %d Mac Address.\n\n", qMcAdd );
  89.     else puts( "e' vuoto (nessun adapter presente).\n" );
  90.  
  91.     printf( "Premi \"invio\" per lasciare il programma. " );
  92.     getchar();
  93.     return 0;
  94. }
  95.  
  96. int esci( const char *msg ) {
  97.     printf( "ERRORE: %s.\n\n", msg );
  98.     printf( "Premi \"invio\" per lasciare il programma. " );
  99.     getchar();
  100.     return 0;
  101. }