Linux C++ Cómo obtener mediante programación la dirección MAC para todos los adaptadores en una LAN

StackOverflow https://stackoverflow.com//questions/21031755

Pregunta

¿Cómo puedo usar C o C++? PROGRAMA (sin línea de comando) para obtener las direcciones MAC (también tomaré las direcciones IP si son "gratuitas") en mi (pequeña) red local.Es un Busybox Linux integrado, por lo que necesito una respuesta minimalista que, con suerte, no requiera portar alguna biblioteca.No tengo libnet ni libpcap.El caché arp parece no contener nunca nada más que la MAC del host DHCP.

¿Fue útil?

Solución

Fuente completa aquí.

Abierto /proc/net/arp, luego lea cada línea así:

char line[500]; // Read with fgets().
char ip_address[500]; // Obviously more space than necessary, just illustrating here.
int hw_type;
int flags;
char mac_address[500];
char mask[500];
char device[500];

FILE *fp = xfopen("/proc/net/arp", "r");
fgets(line, sizeof(line), fp);    // Skip the first line (column headers).
while(fgets(line, sizeof(line), fp))
{
    // Read the data.
    sscanf(line, "%s 0x%x 0x%x %s %s %s\n",
          ip_address,
          &hw_type,
          &flags,
          mac_address,
          mask,
          device);

    // Do stuff with it.
}

fclose(fp);

Esto fue tomado directamente de la implementación de arp de BusyBox, en busybox-1_21_0/networking/arp.c directorio de la Archivo tar BusyBox 1.21.0.Mira el arp_show() función en particular.

Si le tienes miedo a C:

El comando arp -a debería darle lo que desea, tanto direcciones MAC como direcciones IP.

Para obtener todas las direcciones MAC en una subred, puede intentar

nmap -n -sP <subnet>
arp -a | grep -v incomplete
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top