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);
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