quiero encontrar la dirección MAC usando un programa C en Linux. ¿cómo hacerlo?¿Cómo obtener la dirección MAC para una interfaz en Linux usando un programa C?
6
A
Respuesta
26
de 1 minuto de la búsqueda throug Google: (no he probado yo mismo, estoy trabajando en una máquina Windows en el momento)
/*
* gethwaddr.c
*
* Demonstrates retrieving hardware address of adapter using ioctl()
*
* Author: Ben Menking <[email protected]>
*
*/
#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
int main(int argc, char *argv[])
{
int s;
struct ifreq buffer;
s = socket(PF_INET, SOCK_DGRAM, 0);
memset(&buffer, 0x00, sizeof(buffer));
strcpy(buffer.ifr_name, "eth0");
ioctl(s, SIOCGIFHWADDR, &buffer);
close(s);
for(s = 0; s < 6; s++)
{
printf("%.2X ", (unsigned char)buffer.ifr_hwaddr.sa_data[s]);
}
printf("\n");
return 0;
}
2
Hay una gran biblioteca para gestionar ethernet. Si quiere ir a cosas de bajo nivel, sin duda vale la pena aprender. C API es bastante difícil de aprender.
Lib PCAP.
un código de ejemplo:
#include <pcap.h>
#include <stdlib.h>
#include <netinet/ip.h>
#include <netinet/if_ether.h>
void find_eth_addr(struct in_addr *search_ip, const struct pcap_pkthdr* pkthdr, const u_char *packet) {
struct ether_header *eth_hdr = (struct ether_header *)packet;
if (ntohs(eth_hdr->ether_type) == ETHERTYPE_IP) {
struct ip *ip_hdr = (struct ip *)(packet + sizeof(struct ether_header));
if (ip_hdr->ip_dst.s_addr == search_ip->s_addr)
print_eth_addr(eth_hdr->ether_dhost);
if (ip_hdr->ip_src.s_addr == search_ip->s_addr)
print_eth_addr(eth_hdr->ether_shost);
}
}
También hay buenas "las funciones del núcleo contenedor" como biblioteca: DNET
que proporciona una gran funcionalidad para usarlo en redes de bajo nivel . (también obteniendo direcciones MAC).
Hay UNIX puertos & ganar para ambas bibliotecas.
Cuestiones relacionadas
- 1. Obtener dirección MAC en Linux usando mono
- 2. ¿Cómo obtener la dirección MAC de su máquina usando un programa C?
- 3. Cómo obtener la dirección IPv6 de una interfaz en Linux
- 4. Obtener la dirección IP de una interfaz en Linux
- 5. Dirección MAC de la interfaz en OS X (C)
- 6. Compilar programa en C++ en Mac para funcionar en Linux
- 7. Obteniendo la dirección MAC
- 8. C/C++ de Linux dirección MAC de todas las interfaces
- 9. ¿Cómo obtengo la dirección física (MAC) de una dirección IP usando C#?
- 10. Obtener dirección MAC de Android (no interfaz wifi)
- 11. ¿Cómo obtener una dirección MAC estable para PC?
- 12. ¿Cómo obtener la dirección MAC de la interfaz WIFI en android?
- 13. ¿Cómo obtener la dirección MAC de hardware en Windows
- 14. ¿Cómo obtener la dirección MAC de la interfaz de red WiFi?
- 15. Obtener la dirección MAC de dispositivos usando Python
- 16. Cómo obtener la dirección MAC programáticamente en C# para un dispositivo con Windows Mobile 6.0
- 17. Cómo obtener la identificación MAC de un sistema usando C#
- 18. cómo obtener la dirección MAC de un cliente de HttpServlet?
- 19. cómo obtener la dirección MAC desde Windows-Mobile?
- 20. Cómo obtener una dirección de memoria específica usando C
- 21. Ejecutando un programa C en Linux
- 22. ¿Cómo obtener una dirección IP desde la dirección Mac mediante programación en Android?
- 23. ¿Cómo puedo obtener una dirección MAC de una solicitud HTTP?
- 24. Método confiable para obtener la dirección MAC de la máquina en C#
- 25. ¿Cómo obtener la dirección IPv6 en C#?
- 26. dirección de formato MAC en C#
- 27. Linux: escriba un programa en C que 'controla' un shell
- 28. Obtener una dirección MAC de máquinas en la red local desde su IP en C#
- 29. Cómo obtener programáticamente la dirección del montón en Linux
- 30. ¿Cómo puedo obtener la dirección de una estructura en C?
De todos modos para obtenerlo sin hardcoding "eth0" ?? –
Tiene que asignar un adaptador de red, de lo contrario no hay una dirección MAC, puede hacerlo por entrada o como argumento, pero necesitará un adaptador. –
#include para cerrar() –
notlesh