elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda obtener gateway con winapi
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda obtener gateway con winapi  (Leído 1,497 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Ayuda obtener gateway con winapi
« en: 18 Junio 2015, 10:12 am »

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
  1. #include <pcap.h>
  2. #include <winsock.h>
  3. #define IPTOSBUFFERS 12
  4. bool escaner();
  5. bool seleccionar_interfaz(pcap_if_t *interfaz);
  6. char* ip_string(u_long in);
  7. bool escaner()
  8. {
  9. pcap_if_t * adaptadores_lista;
  10. pcap_if_t * adaptador;
  11. pcap_t * capturador = nullptr;
  12.  
  13. if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &adaptadores_lista, NULL) == -1)
  14. return NULL;
  15.  
  16. if (adaptadores_lista == NULL)
  17. return NULL;
  18.  
  19. for (adaptador = adaptadores_lista; adaptador != NULL; adaptador = adaptador->next)
  20. {
  21. if (seleccionar_interfaz(adaptador) == true)
  22. break;
  23. }
  24.  
  25. sniffer(adaptador->name,capturador);
  26. pcap_freealldevs(adaptadores_lista);
  27. }
  28.  
  29. bool seleccionar_interfaz(pcap_if_t *interfaz)
  30. {
  31. pcap_addr_t *a;
  32.  
  33. for (a = interfaz->addresses; a; a = a->next)
  34. {//Está la wifi y ethernet. Coje la primera por defecto; Wi-Fi
  35. if (a->addr->sa_family == AF_INET)
  36. if (strcmp(ip_string(((struct sockaddr_in *)a->addr)->sin_addr.s_addr), "0.0.0.0") != 0)
  37. return true;
  38. }
  39. return false;
  40. }
  41.  
  42. char* ip_string(u_long in)
  43. {
  44. static char output[IPTOSBUFFERS][3 * 4 + 3 + 1];
  45. static short which;
  46. u_char *p;
  47.  
  48. p = (u_char *)&in;
  49. which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
  50. _snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]), "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
  51. return output[which];
  52. }

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.


En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines