GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtener la dirección MAC de su máquina usando un programa C?

Mucho mejor que toda esta locura de socket o shell es simplemente usar sysfs para esto:

el archivo /sys/class/net/eth0/address lleva su dirección mac como una cadena simple que puede leer con fopen() /fscanf() /fclose() . Nada más fácil que eso.

Y si desea admitir otras interfaces de red además de eth0 (y probablemente lo desee), simplemente use opendir() /readdir() /closedir() en /sys/class/net/ .


Debe iterar sobre todas las interfaces disponibles en su máquina y usar ioctl con SIOCGIFHWADDR bandera para obtener la dirección mac. La dirección mac se obtendrá como una matriz binaria de 6 octetos. También desea omitir la interfaz de bucle invertido.

#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);
}

Desea echar un vistazo a la página de manual de getifaddrs(3). Hay un ejemplo en C en la propia página de manual que puede usar. Desea obtener la dirección con el tipo AF_LINK .


Linux
  1. Cómo cambiar la dirección MAC usando macchanger en Kali Linux

  2. ¿Cómo ser anónimo en el protocolo IPv6 al no usar la dirección Mac en Eui-64?

  3. ¿Cómo agregar una dirección IP en Ubuntu 18.04 usando netplan?

  4. Cómo obtener una dirección de memoria específica usando C

  5. Obtenga la dirección MAC usando un script de shell

Cómo cambiar la dirección MAC en Ubuntu 20.04 usando Macchanger

Cómo cambiar la dirección MAC de la red en Linux

Cómo cambiar la dirección MAC en Linux

Cómo obtener su dirección IP en Linux

¿Cómo bloquear una dirección IP usando .htaccess?

Cómo obtener especificaciones de hardware de su sistema usando lshw Hardware Lister