Nathanael Schweers schrieb:
On Mon, 30 Aug 2010 14:36:09 +0200
lano <mail4l...@web.de> wrote:
*-------net.c------*
#include <stdio.h>
#include <string.h>
#include <net/if.h>
#include <netinet/in.h>
#include <sys/ioctl.h>
#define BUFSIZE 60
unsigned char *get_mac(void) {
int sd;
struct ifreq ifr;
char *buffer=malloc(BUFSIZE+1);
buffer[0]=0;
sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if (sd < 0) {
perror("socket");
exit(1);
}
strncpy(&ifr.ifr_name, "eth0", IFNAMSIZ);
if (ioctl(sd, SIOCGIFHWADDR, &ifr) < 0) {
perror("ioctl SIOCGIFHWADDR");
exit(1);
}
buffer = (unsigned char *) &ifr.ifr_hwaddr.sa_data;
//printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5]);
*------- Wenn ich printf auskommentiere wird die mac auch
angezeigt------* return buffer;
}
*------net.h------*
#ifndef __NET_H__
#define __NET_H__
unsigned char *get_mac(void);
#endif
*-------main.c------*
#include "net.h"
char *buffer;
int main(int argc, char **argv) {
printf("Mac: %s\n", get_mac());
free(buffer);
return 0;
}
Ich hab ehrlich gesagt Sowas noch nie gemacht, aber ... was genau ist
denn da dein Problem?
ich erhalte als ausgabe:
Kanal: 2718f001d176
Mac:
Wie gesagt der Kanal ist richtig, das funktioniert. Nur die Mac wird
nicht angezeigt.
Wenn ich bei printf nicht %s sondern %x angebe bekomme ich:
Kanal: 2718f001d176
Mac: 7ffffdf2
Meine vermutung, jetzt erhalte ich nur die adresse des speicherbereichs
bei %c
Kanal: 2718f001d176
Mac: �
Problem ist das ich gern ein char string zurück gegeben haben möchte, im
grunde das selbe wie bei read_file, was wir ja schon hatten, also
vermute ich den fehler bei return in der funktion get_mac.
voher hab ich ja:
buffer = (unsigned char *) &ifr.ifr_hwaddr.sa_data;
erstens weis ich nicht was das mit & sein soll, ich hab auch schon versucht:
return &ifr.ifr_hwaddr.sa_data;
anzugeben, funktioniert aber auch nicht.
in buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5] steht jedenfalls
die mac drin.
wenn in der funktion get_mac
printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5]);
auskommentiere wird sie auch ausgegeben.
Ich bekomm es aber nicht hin das ich sie in der main funktion angezeigt bekomme.
-sven-
--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org