GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere l'indirizzo MAC della tua macchina usando un programma C?

Molto più bello di tutta questa follia di socket o shell è semplicemente usare sysfs per questo:

il file /sys/class/net/eth0/address riporta il tuo indirizzo mac come semplice stringa che puoi leggere con fopen() /fscanf() /fclose() . Niente di più facile di così.

E se vuoi supportare altre interfacce di rete oltre a eth0 (e probabilmente lo vuoi), usa semplicemente opendir() /readdir() /closedir() su /sys/class/net/ .


Devi iterare su tutte le interfacce disponibili sulla tua macchina e utilizzare ioctl con SIOCGIFHWADDR flag per ottenere l'indirizzo mac. L'indirizzo mac verrà ottenuto come un array binario a 6 ottetti. Vuoi anche saltare l'interfaccia di loopback.

#include <sys/ioctl.h>
#include <net/if.h> 
#include <unistd.h>
#include <netinet/in.h>
#include <string.h>

int main()
{
    struct ifreq ifr;
    struct ifconf ifc;
    char buf[1024];
    int success = 0;

    int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
    if (sock == -1) { /* handle error*/ };

    ifc.ifc_len = sizeof(buf);
    ifc.ifc_buf = buf;
    if (ioctl(sock, SIOCGIFCONF, &ifc) == -1) { /* handle error */ }

    struct ifreq* it = ifc.ifc_req;
    const struct ifreq* const end = it + (ifc.ifc_len / sizeof(struct ifreq));

    for (; it != end; ++it) {
        strcpy(ifr.ifr_name, it->ifr_name);
        if (ioctl(sock, SIOCGIFFLAGS, &ifr) == 0) {
            if (! (ifr.ifr_flags & IFF_LOOPBACK)) { // don't count loopback
                if (ioctl(sock, SIOCGIFHWADDR, &ifr) == 0) {
                    success = 1;
                    break;
                }
            }
        }
        else { /* handle error */ }
    }

    unsigned char mac_address[6];

    if (success) memcpy(mac_address, ifr.ifr_hwaddr.sa_data, 6);
}

Vuoi dare un'occhiata alla pagina man di getifaddrs(3). C'è un esempio in C nella manpage stessa che puoi usare. Vuoi ottenere l'indirizzo con il tipo AF_LINK .


Linux
  1. Come modificare l'indirizzo MAC utilizzando macchanger su Kali Linux

  2. Come essere anonimi sul protocollo Ipv6 non utilizzando l'indirizzo Mac in Eui-64?

  3. Come aggiungere l'indirizzo IP su Ubuntu 18.04 usando netplan?

  4. Come ottenere un indirizzo di memoria specifico usando C

  5. Ottieni l'indirizzo MAC usando lo script della shell

Come modificare l'indirizzo MAC su Ubuntu 20.04 utilizzando Macchanger

Come modificare l'indirizzo MAC di rete in Linux

Come modificare l'indirizzo MAC in Linux

Come ottenere il tuo indirizzo IP su Linux

Come bloccare un indirizzo IP usando .htaccess?

Come ottenere le specifiche hardware del tuo sistema utilizzando lshw Hardware Lister