#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#define MAX_INTERFACES 10
#define MAX_BUFFER_SIZE 1024
int main() {
int sock;
struct ifconf ifconf;
struct ifreq ifreq[MAX_INTERFACES];
char buffer[MAX_BUFFER_SIZE];
int interfaceCount, i;
// Crear un socket de dominio AF_INET para comunicación de red
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1) {
perror("Error al crear el socket");
exit(1);
}
ifconf.ifc_buf = (char *)ifreq;
ifconf.ifc_len = sizeof(ifreq);
// Obtener la lista de interfaces de red
if (ioctl(sock, SIOCGIFCONF, &ifconf) == -1) {
perror("Error al obtener la lista de interfaces de red");
close(sock);
exit(1);
}
// Calcular el número de interfaces de red encontradas
interfaceCount = ifconf.ifc_len / sizeof(struct ifreq);
printf("Interfaces de red encontradas: %d\n", interfaceCount);
// Iterar sobre las interfaces y obtener información de cada una
for (i = 0; i < interfaceCount; i++) {
struct sockaddr_in *address;
address = (struct sockaddr_in *)&ifreq[i].ifr_addr;
// Obtener nombre de la interfaz
if (ioctl(sock, SIOCGIFNAME, &ifreq[i]) != -1) {
printf("Interfaz %d: %s\n", i+1, ifreq[i].ifr_name);
// Obtener dirección IP de la interfaz
printf("Dirección IP: %s\n", inet_ntoa(address->sin_addr));
} else {
perror("Error al obtener el nombre de la interfaz");
}
}
// Cerrar el socket
close(sock);
return 0;
}
Comentarios sobre la versión: 1.0 (0)
No hay comentarios