элементарный способ проверить MA C адрес на linux для лицензирования - PullRequest
1 голос
/ 20 января 2020

фрагмент кода:

/* ---------------------------------------------------------------------- */
/* create list mac addresses ofcomputers that program should be allowed to run on */
#define MAX_N_MACS 100

char whitelist_mac[MAX_N_MACS][18];
int nmac = 2;
sprintf(  whitelist_mac[0], "a0:b1:c2:d3:e4:f5" );
sprintf(  whitelist_mac[0], "a0:b1:c2:d3:e4:f6" );

/* ---------------------------------------------------------------------- */

/* how I verify if computer running my code is on my whitelist */

int Check_Licensing ( void )
{
   FILE *fp1;
   char mac_thissystem[18];

   /* lower case found in /sys/class/net/eth0/address */
   fp1 = fopen( "/sys/class/net/eth0/address", "r" );
   if ( fp1 == NULL )
   {
      printf("\n   Error: license problem, program quitting\n\n");
      exit( 0 );
   }
   fgets( mac_thissystem, 18, fp1 );
   fclose( fp1 );

   for ( i = 0; i < nmac; i++ )
   {
      if ( strcmp( ok_mac[i], mac_thissystem ) == 0 )
         return 1;
   }

   /* current system MAC does not match whitelist */
   return 0;
}

Это работает, но моя проблема, кажется, в переносимости с попыткой ссылки /sys/class/net/eth0/address. Укажите eth0 деталь. С установкой biosdevname и net.ifnames на RHEL / CentOS 7 в эти дни нет никакой гарантии, что путь /sys/class/net/eth0/address будет существовать. eth0 может быть чем-то вроде eno1. Я также видел enps0...something.

, что является самым надежным и портативным способом сделать что-то подобное на linux?

  1. Как узнать сетевое именование схема, чтобы сначала выяснить, есть ли у меня eth0 или somethingelse для имени сетевого устройства?
  2. Тогда, есть ли лучший способ получить сетевой MA C адрес работающей системы, лучше чем использовать /sys/class/net/<device_name>/address? Я предпочел бы не требовать, чтобы кто-то делал GRUB_CMDLINE_LINUX=net.ifnames=0, чтобы заставить eth0 из-за моего кодирования. Я не заинтересован в том, чтобы сделать эту работу в Microsoft windows или любой другой, не linux операционной системе.
...