2011-05-12 13 views
8

Quiero obtener la lista de todas las interfaces disponibles en una PC en particular junto con sus tipos de conexión por cable o inalámbrica. Actualmente estoy haciendo lo siguiente, pero sin éxito: -Desea obtener la lista de todas las interfaces disponibles en el sistema

ioctl(sd, SIOCGIFNAME, &ifr); 
strncpy(ifname,ifr.ifr_name,IFNAMSIZ); 
printf("Interface name :%s\n",ifname); 

También será bueno si solo los nombres están disponibles.

+1

Conseguir el tipo de interfaz puede ser difícil, pero enumerar las interfaces (y sus direcciones) es bastante directo. Consulte http://stackoverflow.com/questions/2021549/get-ip-address-in-c-language o http://stackoverflow.com/questions/3909656/enumerating -each-ip-assigned-to-network-interfaces/3909936 – nos

Respuesta

19

Si está en Ubuntu, como indican sus etiquetas, siempre puede leer /proc/net/dev que tiene la información que está buscando en él.

12
ifconfig -a 

por todo lo que puede ver las interfaces listas avalaible no necesitas guión de código C para esto,

Si quieres más información para sus interfaces de

lspci 

Puede encontrar su tipo de interfaces y modelos

2

La interfaz C se llama ifaddrs, puede incluirla en:

#include <sys/types.h> 
#include <ifaddrs.h> 

Las funciones que le interesan son getifaddrs y una vez hecho esto con los datos, freeifaddrs.

struct ifaddrs { 
    struct ifaddrs *ifa_next; /* Next item in list */ 
    char   *ifa_name; /* Name of interface */ 
    unsigned int  ifa_flags; /* Flags from SIOCGIFFLAGS */ 
    struct sockaddr *ifa_addr; /* Address of interface */ 
    struct sockaddr *ifa_netmask; /* Netmask of interface */ 
    union { 
     struct sockaddr *ifu_broadaddr; 
         /* Broadcast address of interface */ 
     struct sockaddr *ifu_dstaddr; 
         /* Point-to-point destination address */ 
    } ifa_ifu; 
#define    ifa_broadaddr ifa_ifu.ifu_broadaddr 
#define    ifa_dstaddr ifa_ifu.ifu_dstaddr 
    void   *ifa_data; /* Address-specific data */ 
}; 

Esta estructura incluye toda la información que los ifconfig comando devuelve la herramienta de línea.

Para los usuarios de C++, le sugiero que utilice un Deleter así:

void ifaddrs_deleter(struct ifaddrs * ia) 
{ 
    freeifaddrs(ia); 
} 

y adjuntar el resultado de getifaddrs() a ella con:

struct ifaddrs * ifa_start(nullptr); 
if(getifaddrs(&ifa_start) != 0) 
{ 
    return; 
} 
// will automatically delete on exception or any return 
std::shared_ptr<struct ifaddrs> auto_free(ifa_start, ifaddrs_deleter); 
Cuestiones relacionadas