MAC-Adresse ermitteln wenn eth nicht verbunden?

Antworten
Nachricht
Autor
ElBlues
Beiträge: 127
Registriert: 25. Mär 2008 12:50
Kontaktdaten:

MAC-Adresse ermitteln wenn eth nicht verbunden?

#1 Beitrag von ElBlues » 22. Jul 2011 8:03

Hi,

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

Code: Alles auswählen

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!

Benutzeravatar
Janka
Beiträge: 3581
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 22. Jul 2011 9:55

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.

ElBlues
Beiträge: 127
Registriert: 25. Mär 2008 12:50
Kontaktdaten:

#3 Beitrag von ElBlues » 27. Jul 2011 6:52

Janka hat 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 :-)
http://www.kaufkauf.net - nie wieder Einkäufe vergessen!

Antworten