Ayuda obtener gateway con winapi

Iniciado por Kaxperday, 18 Junio 2015, 10:12 AM

0 Miembros y 1 Visitante están viendo este tema.

Kaxperday

Hola foreros, estoy intentando obtener la gateway que me ofrece servicio a internet con la winapi, el problema es que tras discriminar todas las interfaces de red, me quedan 2 que son la de el wifi y la de ethernet, pero la de ethernet no tiene conexión, ¿qué hacer entonces para coger la correcta?, también puede darse el caso de que tenga ethernet y no wifi.

Código (cpp) [Seleccionar]

#include <pcap.h>
#include <winsock.h>
#define IPTOSBUFFERS 12
bool escaner();
bool seleccionar_interfaz(pcap_if_t *interfaz);
char* ip_string(u_long in);
bool escaner()
{
pcap_if_t * adaptadores_lista;
pcap_if_t * adaptador;
pcap_t * capturador = nullptr;

if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &adaptadores_lista, NULL) == -1)
return NULL;

if (adaptadores_lista == NULL)
return NULL;

for (adaptador = adaptadores_lista; adaptador != NULL; adaptador = adaptador->next)
{
if (seleccionar_interfaz(adaptador) == true)
break;
}

sniffer(adaptador->name,capturador);
pcap_freealldevs(adaptadores_lista);
}

bool seleccionar_interfaz(pcap_if_t *interfaz)
{
pcap_addr_t *a;

for (a = interfaz->addresses; a; a = a->next)
{//Está la wifi y ethernet. Coje la primera por defecto; Wi-Fi
if (a->addr->sa_family == AF_INET)
if (strcmp(ip_string(((struct sockaddr_in *)a->addr)->sin_addr.s_addr), "0.0.0.0") != 0)
return true;
}
return false;
}

char* ip_string(u_long in)
{
static char output[IPTOSBUFFERS][3 * 4 + 3 + 1];
static short which;
u_char *p;

p = (u_char *)&in;
which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
_snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]), "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
return output[which];
}


Una solución sería abrirlas en orden y comprobar que existe tráfico en ellas y coger la que tenga tráfico. Pero tampoco me convence, ¿tenéis algo seguro para obtener la ip de la gateway en funcionamiento?

Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.