Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
MAC-Adresse ermitteln wenn eth nicht verbunden?

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ElBlues



Anmeldungsdatum: 25.03.2008
Beiträge: 127

BeitragVerfasst am: 22. Jul 2011 8:03   Titel: MAC-Adresse ermitteln wenn eth nicht verbunden?

Hi,

aktuell ermittle ich die MAC-Adressen meiner vorhandenen Netzwerkgeräte auf diesem Weg:

Code:

s = socket(AF_INET, SOCK_DGRAM, 0);
if (s==-1) return false;

ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = buf;
ioctl(s, SIOCGIFCONF, &ifc);
 
IFR = ifc.ifc_req;
for (i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; IFR++)
{
   strcpy(ifr.ifr_name, IFR->ifr_name);
   if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0)
   {
      if (! (ifr.ifr_flags & IFF_LOOPBACK))
      {
         if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0)
         {
            bcopy(ifr.ifr_hwaddr.sa_data,m,6);
            ...
         }
      }
   }
}
close(s);


Nachteil: hier muss - vermutlich Dank NetworkManager - ein Netzwerkinterface tatsächlich verbunden sein, damit es in der Liste auftaucht.

Ich hätte aber gerne die MAC-Adressen aller Interfaces, egal ob verbunden oder nicht. Wie geht das am besten?
_________________
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 22. Jul 2011 9:55   Titel:

Vermutlich hängt das damit zusammen, dass ein AF_INET-Socket voraussetzt, dass dem Gerät eine IP-Adresse zugewiesen ist. Andere Protokollfamilie ausprobieren, z.B. raw-Sockets.

Ich mache das übrigens ganz anders und gucke mir einfach den Inhalt der Dateien /sys/class/net/eth*/address an. Geht natürlich nur, wenn sysfs da ist.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

ElBlues



Anmeldungsdatum: 25.03.2008
Beiträge: 127

BeitragVerfasst am: 27. Jul 2011 6:52   Titel:

Janka hat folgendes geschrieben::
Ich mache das übrigens ganz anders und gucke mir einfach den Inhalt der Dateien /sys/class/net/eth*/address an. Geht natürlich nur, wenn sysfs da ist.


Das klingt doch mal nach einer prima Lösung - und wenn sysfs nicht existiert kann ich immer noch auf meine Methode zurückgreifen Smile
_________________
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy