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

Antwort per Email an