Os: RedHat Linux Linux verwalten: 2.6.18.8-1 #Finding ursprüngliche MAC-Adresse aus Hardware selbst
Ist dies möglich, MAC-Adresse Form NIC direkt zu lesen? Ich habe unten Code, aber es nur von oben Schicht lesen, aber nicht die Karte selbst !!!
Ich versuche herauszufinden, wie Sie die ursprüngliche MAC-Adresse eines Ethernet-NIC auf meiner Linux-Box finden. Ich verstehe, wie Sie die aktuelle MAC-Adresse mit ifconfig finden, aber wenn die Adresse geändert wurde, sagen Sie mit 'ifconfig eth0 hw ether uu:vv:ww:yy:xx:zz'
, oder ich setze "permanent" es mit vi /etc/sysconfig/network-scripts/ifcfg-eth0
.Diese Datei ... Ich kann erfolgreich UP
es in REBOOT
auch. Wie finde ich das Original? Es muss einen Weg geben, es zu finden, weil es immer noch permanent in die Karte gebrannt wird, aber ich finde kein Werkzeug, um die eingebrannte Adresse zu lesen. gibt es irgendein Dienstprogramm für es oder Befehl dafür? Ich denke, C-Code dafür zu schreiben. aber ich weiß nicht, wie ich das im obigen Fall machen soll.
** Code unten meinen aktuellen MAC gibt aber nicht original MAC
#include <stdio.h> /* Standard I/O */
#include <stdlib.h> /* Standard Library */
#include <errno.h> /* Error number and related */
#define ENUMS
#include <sys/socket.h>
#include <net/route.h>
#include <net/if.h>
#include <features.h> /* for the glibc version number */
#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
#include <netpacket/packet.h>
#include <net/ethernet.h> /* the L2 protocols */
#else
#include <asm/types.h>
#include <linux/if_packet.h>
#include <linux/if_ether.h> /* The L2 protocols */
#endif
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/un.h>
#include <sys/ioctl.h>
#include <netdb.h>
int main(int argc, char * argv[]){
unsigned char mac[IFHWADDRLEN];
int i;
get_local_hwaddr(argv[1], mac);
for(i = 0; i < IFHWADDRLEN; i++){
printf("%02X:", (unsigned int)(mac[i]));
}
}
int get_local_hwaddr(const char *ifname, unsigned char *mac)
{
struct ifreq ifr;
int fd;
int rv; // return value - error value from df or ioctl call
/* determine the local MAC address */
strcpy(ifr.ifr_name, ifname);
fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if (fd < 0)
rv = fd;
else {
rv = ioctl(fd, SIOCGIFHWADDR, &ifr);
if (rv >= 0) /* worked okay */
memcpy(mac, ifr.ifr_hwaddr.sa_data, IFHWADDRLEN);
}
return rv;
}
Nur weil es dort verbrannt wird, bedeutet es nicht, dass es verfügbar sein muss. Ich weiß nicht, wie Linux und die Karten funktionieren, aber es wäre völlig plausibel, wenn der MAC nur bei einem Neustart wiederhergestellt würde, wenn die Firmware der Karten initialisiert wird. –
Ich möchte nur meine Maschine mit SPOOFED MAC UP und ich kann es erfolgreich machen. aber währenddessen möchte ich meinen originalen MAC für meine Anwendung. Das ist mein Problem. –
Ich denke, dass @AmigableClarkKant schlägt vor, dass ein vollständiger Energiezyklus die NIC initialisieren kann von der Firmware. Starten Sie nicht einfach neu. Herunterfahren, warten, einschalten. Das könnte den NIC mit seiner ursprünglichen MAC-Adresse neu starten. Dann könnten Sie die ursprüngliche MAC-Adresse abrufen und speichern, bevor Sie sie zur Laufzeit ändern. –