Superuser

Autor Thema: MAC-Adresse ermitteln?  (Gelesen 8573 mal)

Oxygenic

  • Gast
MAC-Adresse ermitteln?
« am: 06. April 2006, 20:29:47 »
Unter Linux komme ich mittels fcntl() und SIOCGIFHWADDR an die HW-Adresse eines Netzwerkinterface. Nur wie geht das unter Solaris? Google hat mir da nicht wirklich weiter helfen können...

sonnenblen.de - Das unabhängige Sun User Forum

MAC-Adresse ermitteln?
« am: 06. April 2006, 20:29:47 »

claus

  • Gast
Re: MAC-Adresse ermitteln?
« Antwort #1 am: 06. April 2006, 20:42:52 »
Hallo Oxy,

Funktioniert allerdings nur als root (habs gerade ausprobiert - als nicht-root fehlt das ether):

http://www.artsci.wustl.edu/ASCC/documentation/macaddrss.html

Solaris/SunOS
On Solaris and SunOS systems, the ethernet device is typically called le0 or ie0. In order to find the MAC address of the ethernet device, you must first become root, through the use of su. Then, type ifconfig -a and look up the relevant info. For example:

    # ifconfig -a le0: flags=863 &ltUP,BROADCAST,NOTRAILERS,RUNNING> inet 131.225.220.144 netmask ffffff00 broadcast 131.225.255.255 ether 8:0:20:f:c2:f8

Note: Solaris and SunOS strip off the leading 0 commonly included in the MAC address. In the case of this machine, the MAC address is 08:00:20:0f:c2:f8

Da gibt es garantiert aber auch eine bessere Lösung.

Claus

mdjr

  • Gast
Re: MAC-Adresse ermitteln?
« Antwort #2 am: 07. April 2006, 07:17:19 »
Unter Linux komme ich mittels fcntl() und SIOCGIFHWADDR an die HW-Adresse eines Netzwerkinterface. Nur wie geht das unter Solaris? Google hat mir da nicht wirklich weiter helfen können...

Hallo.

Unter Solaris (bis Solaris 9) ist das leider nicht so einfach. Außerdem sind root-Rechte erforderlich:
http://access1.sun.com/cgi-bin/rinfo2html?328105.faq
Daher gibt ifconfig die MAC-Adresse nur heraus, wenn man sich als root eingeloggt hat.

Ich habe immer die ARP-Tabelle durchsucht (Kommandozeile: arp -a). Hintergrund: Jedes System schickt i.d.R. nur seine eigene MAC-Adresse an andere Systeme weiter...

Folgenden Code habe ich auf die selbe Frage (MAC-Adresse aus C-Programm) bereits im Sun-Developer-Forum (forum.sun.com) gepostet:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/sockio.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <netinet/in.h>
#include <arpa/inet.h>
 
main(int argc,char *argv)
{
    unsigned char eth_addr[6];
    int i,j,sock;
    unsigned char *p;
    struct lifconf lic;
    struct lifreq lifrs[30];
    struct lifnum num;
    struct arpreq ar;
    struct sockaddr_in *soap,*soap2;
   
    /* Enumerate all IP addresses of the system */
    sock=socket(PF_INET,SOCK_DGRAM,IPPROTO_IP);
    num.lifn_family=AF_INET;
    num.lifn_flags=0;
    ioctl(sock,SIOCGLIFNUM,&num);
    lic.lifc_family=AF_INET;
    lic.lifc_flags=0;
    lic.lifc_len=sizeof(lifrs);
    lic.lifc_buf=(caddr_t)&(lifrs[0] );
    ioctl(sock,SIOCGLIFCONF,&lic);
 
    /* Get the ethernet address for each of them */
    for(i=0;i<num.lifn_count;i++)
    {
        /* Get IP address */
        ioctl(sock,SIOCGLIFADDR,&(lifrs[ i ]));
        soap=(struct sockaddr_in *)&(lifrs[ i ].lifr_addr);
        soap2=(struct sockaddr_in *)&(ar.arp_pa);
        *soap2=*soap;
 
        /* Print IP address */
        p=(unsigned char *)&(soap->sin_addr);
        printf("%s: %u.%u.%u.%u - ",lifrs[ i ].lifr_name,
            p[0],p[1],p[2],p[3]);
       
        /* Get ethernet address */
        if(ioctl(sock,SIOCGARP,&ar)<0)
        {
            printf("No ethernet address.\n");
        }
        else
        {
            p=(unsigned char *)&(ar.arp_ha.sa_data);
            printf("%02X:%02X:%02X:%02X:%02X:%02X\n",
                p[0],p[1],p[2],p[3],p[4],p[5]);
        }
    }
 
    close(sock);
}

Martin

Oxygenic

  • Gast
Re: MAC-Adresse ermitteln?
« Antwort #3 am: 07. April 2006, 07:52:36 »
Hi,

danke, damit lässt sich was anfangen :-)

Dass das nur als root geht ist kein Problem, da muss der User den daemon halt als root starten (ja, er hat die Möglichkeit, die Rechte automatisch zu minimieren).

Oxy

mdjr

  • Gast
Re: MAC-Adresse ermitteln?
« Antwort #4 am: 07. April 2006, 22:15:10 »
Dass das nur als root geht...

Hallo.

Das Code-Stück, das ich oben gepostet habe, müsste im Gegensatz zum direkten Auslesen der MAC-Adresse (wie auf sun.com beschrieben) sogar ohne root-Rechte gehen. Leider funktioniert es nur, wenn die Netzwerkkarte auch in Betrieb ist.

Martin