Foro de elhacker.net

Comunicaciones => Redes => Mensaje iniciado por: Kaxperday en 20 Junio 2015, 03:14 am



Título: ¿IP del router termina siempre en .1?
Publicado por: Kaxperday en 20 Junio 2015, 03:14 am
Estoy haciendo un programa y obtengo la IP de mi ordenador en la red, la idea es cortar el .x por .1 para obtener la IP del router. Ejemplo: mi IP es 192.168.1.5 la del router será 192.168.1.1, ¿pero eso es siempre así? Sino alguien conoce un método para obtener la IP del router en cpp, sino ya me las apañaré, perdonaz la duda tonta.

Saludos.


Título: Re: ¿IP del router termina siempre en .1?
Publicado por: daryo en 20 Junio 2015, 03:37 am
te respondo lo facil xD
 no necesariamente acaba en .1  pero es lo mas comun.


Título: Re: ¿IP del router termina siempre en .1?
Publicado por: Eleкtro en 20 Junio 2015, 03:45 am
¿IP del router termina siempre en .1?

¿eso es siempre así?

Al parecer no, no siempre es así, la dirección IP de la puerta de enlace predeterminada (o Gateway) de un Router, puede variar según la marca (y no se si también depende del modelo) del Router en cuestión, aquí tienes varios:

(http://i.imgur.com/vmw0kUD.png)

En .Net es muy sencillo de averiguar el Gateway de una interfaz de red:

VB.Net:
Código
  1.    Public Shared Function GetDefaultGateway() As IPAddress
  2.        Dim card As NetworkInterface = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault()
  3.        If card Is Nothing Then
  4.            Return Nothing
  5.        End If
  6.        Dim address As GatewayIPAddressInformation = card.GetIPProperties().GatewayAddresses.FirstOrDefault()
  7.        Return address.Address
  8.    End Function

C#:
Código
  1. public static IPAddress GetDefaultGateway()
  2. {
  3.    var card = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault();
  4.    if(card == null) return null;
  5.    var address = card.GetIPProperties().GatewayAddresses.FirstOrDefault();
  6.    return address.Address;
  7. }

(primero debes identificar la interfáz en cuestión, por defecto esa función devuelve la primera interfáz encontrada)

La misma información la puedes averiguar usando el comando ipconfig.exe en la consola de Windows.

Código:
> ipconfig

Configuración IP de Windows

Adaptador de Ethernet Ethernet 2:

   Sufijo DNS específico para la conexión. . : x
   Vínculo: dirección IPv6 local. . . : x
   Dirección IPv4. . . . . . . . . . . . . . : x
   Máscara de subred . . . . . . . . . . . . : x
   Puerta de enlace predeterminada . . . . . : 192.168.0.1

Saludos!


Título: Re: ¿IP del router termina siempre en .1?
Publicado por: 123456 en 20 Junio 2015, 03:47 am
El .1 viene de un acuerdo común, pero no es una regla, simplemente una preferencia


Título: Re: ¿IP del router termina siempre en .1?
Publicado por: yum-kax en 20 Junio 2015, 04:05 am
Por defecto generalmente si, la mayoria de las marcas optan por tener esa direccion..
La realidad es que en el protocolo TCP/IP, hay una direccion de gateway y una de broadcast por cada red o subred que haya.

Con lo cual se estima que la 192.168.x.1 es gateway y .255 es broadcast.

Si lees algo mas de este protocolo podras quitarte mas dudas, pero la respuesta es NO. solo viene por defecto.




Título: Re: ¿IP del router termina siempre en .1?
Publicado por: Slava_TZD en 20 Junio 2015, 10:40 am
Como ya te han respondido el gateway no tiene por qué estar en la primera dirección aunque en la mayoria de multifunctions viene configurado así.

En Linux lo puedes hacer así:

Código
  1. char* GetGatewayForInterface(const char* interface)
  2. {
  3.    char* gateway = NULL;
  4.  
  5.    char cmd [1000] = {0x0};
  6.    sprintf(cmd,"route -n | grep %s  | grep 'UG[ \t]' | awk '{print $2}'", interface);
  7.    FILE* fp = popen(cmd, "r");
  8.    char line[256]={0x0};
  9.  
  10.    if(fgets(line, sizeof(line), fp) != NULL) { gateway = line; }
  11.    pclose(fp);
  12. }
  13.  
Con lo cual se estima que la 192.168.x.1 es gateway y .255 es broadcast.

Sure...192.168.1.1/27


Título: Re: ¿IP del router termina siempre en .1?
Publicado por: MinusFour en 20 Junio 2015, 15:28 pm
Por defecto generalmente si, la mayoria de las marcas optan por tener esa direccion..
La realidad es que en el protocolo TCP/IP, hay una direccion de gateway y una de broadcast por cada red o subred que haya.

Con lo cual se estima que la 192.168.x.1 es gateway y .255 es broadcast.

Si lees algo mas de este protocolo podras quitarte mas dudas, pero la respuesta es NO. solo viene por defecto.

Estas caracteristicas no son propias de TCP sino de IP. Tampoco es cierto que hay una dirección gateway por cada segmento de red, pero si que hay un broadcast. Por cada segmento de red, hay un identificador de red y un broadcast, por eso se le resta 2 a la possible cantidad de hosts dentro de un segmento de red. La ultima direccion del segmento es el broadcast y la "primera" usualmente es el identificador de red. Para el caso de un segmento de red con una mascara de 24 (225.255.255.0) el broadcast si es .255, y el identificador de red .0 (lo cual te deja un total de 254 ips libres para hosts).

Puedes aprender mas acerca de esto, si buscas por VLSM que es lo que se usa para hacer el "subneteo".

En cuanto a como obtener la ip del gateway, no siempre es fácil. Los sistemas operativos pueden obtener la ip gracias a DHCP, porque el protocolo permite anunciar el gateway pero aún asi necesita haber un servidor DHCP configurado. De otra manera, el host conectado a la red no sabe quien es el default gateway y tienes que configurar las interfaces de red manualmente. Tecnicamente, la ip del router puede ser cualquiera dentro del rango valido de hosts del segmento de red, por convencion casi siempre los asignan a la primera direccion valida o a la ultima.


Título: Re: ¿IP del router termina siempre en .1?
Publicado por: Kaxperday en 21 Junio 2015, 00:34 am
Gracias por las respuestas a todos, la verdad suponía que acababan en .1 la mayoría y que había algunos que no, además supongo que se puede configurar de forma manual la IP del router luego no siempre debería acabar en .1. Sin embargo no encuentro una manera eficaz de obtener la IP del router en windows con C++, sin embargo en C# si lo conseguí.

Mi idea (mala idea pero algo es más que nada), se pasa por hacer un IPCONFIG y buscar la línea que me interesa, algo como lo que hizo Slava_TZD pero para windows, aunque puede dar error. La manera correcta de hacerlo sería como dice minusfour utilizando DHCP, pero no se como hacerlo supongo que habría que mandar una peticion y recibir la respuesta escuchando en la interfaz.

Saludos!


Título: Re: ¿IP del router termina siempre en .1?
Publicado por: Slava_TZD en 21 Junio 2015, 11:16 am
GetAdaptersInfo (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365917(v=vs.85).aspx)


Título: Re: ¿IP del router termina siempre en .1?
Publicado por: Kaxperday en 21 Junio 2015, 17:18 pm
Muchas gracias Slava_TZD, he conseguido listar las interfaces como el código del ejemplo, antes lo hacía con winpcap pero no se obtienen datos tan completos como con "IPHLPAPI.lib", así me es más fácil determinar la interfaz en funcionamiento y su MAC, pues antes para obtenerla y sacar la MAC tuve que hacer alguna virguería.

Me quedaré con la interfaz que cumpla tener DHCP activado, tenga dirección gateway distinta de 0.0.0.0 o distinta de null, y al igual con mi ip en la interfaz.

Pueden darse varias coincidencias negativas, que el usuario esté conectado a 2 interfaces con internet a la vez, en ese caso coger una de ellas sería suficiente sin entrar a discriminarlas, (caso tener wifi conectado a red y cable ethernet tambien).

También puede darse que esté conectado a la red pero que no tenga internet que si que me preocupa.

Tambien puede darse que la dirección IP sea 169.158..... es decir que no tiene asignada la dirección IP y tiene el DHCP sin activar luego se solucionaría rápido en la condición del if(dhcp.isenabled()).

De está manera obtendré la interfaz en funcionamiento con salida a internet, y si no está conectado a ninguna red, que diga que no encontró interfaz, se repite pasado X tiempo y solucionado.

Con esto pongo fin a una duda abierta en otro post:

http://foro.elhacker.net/programacion_cc/ayuda_obtener_gateway_con_winapi-t437208.0.html (http://foro.elhacker.net/programacion_cc/ayuda_obtener_gateway_con_winapi-t437208.0.html)

Saludos y gracias a todos por la ayuda.  :rolleyes: :rolleyes: ;-)