?
Abend,
ich habe mir nun etwas Programm geschrieben/zusammenkopiert, finde aber den Fehler nicht, das der Vergleich nicht gleich ist, eventuell "Stringendezeichen"
#define devicemac 622601428928 // hex -> dez
zeigt die MAC-Adresse in Dezimal an (sonst könnte ich die Hexadresse aus dem Binärfile des Programms mit jedem Editor auslesen.)
Kann hier einmal ein Profi drüber kucken, da ich auch diverse Warnungen habe.
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/if.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
/*################################################################################*/
char *uc(char *str)
{
size_t i, len = strlen(str);
for(i = 0; i < len; i++)
{ str[i] = toupper(str[i]); }
return str;
}
/*################################################################################*/
char *lc(char *str)
{
size_t i, len = strlen(str);
for(i = 0; i < len; i++)
{ str[i] = tolower(str[i]); }
return str;
}
/*################################################################################*/
char *getmac(char *iface)
{
#define MAC_STRING_LENGTH 13
char *ret = malloc(MAC_STRING_LENGTH);
struct ifreq s;
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
strcpy(s.ifr_name, iface);
if (fd >= 0 && ret && 0 == ioctl(fd, SIOCGIFHWADDR, &s))
{
int i;
for (i = 0; i < 6; ++i)
snprintf(ret+i*2,MAC_STRING_LENGTH-i*2,"%02x",(unsigned char) s.ifr_addr.sa_data[i]);
}
else
{
perror("malloc/socket/ioctl failed");
exit(1);
}
return(ret);
}
/*################################################################################*/
char *dec_hex(long int num) // Function Definition
{
long int rem[50],i=0,x=0, length=0;
char output[] = "000000000000";
char asc[] = "0";
while(num>0)
{
rem[i]=num%16;
num=num/16;
i++;
length++;
}
x = sizeof(output) - length - 1;
for(i=length-1;i>=0;i--, x++)
{
switch(rem[i])
{
case 10:
output[x] = 'A';
break;
case 11:
output[x] = 'B';
break;
case 12:
output[x] = 'C';
break;
case 13:
output[x] = 'D';
break;
case 14:
output[x] = 'E';
break;
case 15:
output[x] = 'F';
break;
default :
sprintf(&asc[0], "%d", rem[i]);
output[x] = asc[0];
}
}
return(output);
}
/*################################################################################*/
int main()
{
#define landevice "eth0"
#define devicemac 622601428928 // hex -> dez
char *mac = uc(getmac(landevice));
char *nc = uc(dec_hex(devicemac));
if (strcmp(mac, nc) == 0)
{
printf("gefunden:%s\n", mac);
exit(1);
}
}
/*################################################################################*/
Gruß
Der Henry
PS: Geschwindigkeit spielt hier keine Rolle, da alles nur einmal beim Start durchlaufen wird.