una tipos ruta redes que partir para nombre monitorear lista dominio direccion determinar comandos comando básicos c linux

tipos - Encontrar un nombre de interfaz desde una dirección IP



que es una direccion ip (2)

Necesito obtener el nombre de la interfaz proporcionando una dirección IP. No hay una llamada al sistema para obtener esto.

Necesito una implementación para esto en C o C ++

Ya al ​​revés de esto está disponible en Desbordamiento de pila, Encontrar una dirección IP desde un nombre de interfaz .


¿Podría simplemente analizar el resultado de algo así como

netstat -ie | grep -B1 "192.168.21.10"

La parte -B1 le dice a grep que queremos incluir la línea antes de la coincidencia en la salida, así que obtenemos esto:

eth0 Link encap:Ethernet HWaddr 00:13:72:79:65:23 inet addr:192.168.21.10 Bcast:192.168.21.255 Mask:255.255.255.0

Una vez que tiene la confianza de que está obteniendo el resultado que necesita, puede condensarlo aún más en una sola línea ...

netstat -ie | grep -B1 "192.168.21.10" | head -n1 | awk ''{print $1}''

que simplemente devuelve "eth0"


Use getifaddrs(3) . Ejemplo simple Uso "./foo 123.45.67.89" Agregue la comprobación de errores, etc.

#include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <net/if.h> #include <ifaddrs.h> int main(int argc, char *argv[]) { struct ifaddrs *addrs, *iap; struct sockaddr_in *sa; char buf[32]; getifaddrs(&addrs); for (iap = addrs; iap != NULL; iap = iap->ifa_next) { if (iap->ifa_addr && (iap->ifa_flags & IFF_UP) && iap->ifa_addr->sa_family == AF_INET) { sa = (struct sockaddr_in *)(iap->ifa_addr); inet_ntop(iap->ifa_addr->sa_family, (void *)&(sa->sin_addr), buf, sizeof(buf)); if (!strcmp(argv[1], buf)) { printf("%s/n", iap->ifa_name); } } } freeifaddrs(addrs); return 0; }