¿IP del router termina siempre en .1?

Iniciado por Kaxperday, 20 Junio 2015, 03:14 AM

0 Miembros y 2 Visitantes están viendo este tema.

Kaxperday

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.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

daryo

#1
te respondo lo facil xD
no necesariamente acaba en .1  pero es lo mas comun.
buenas

Eleкtro

#2
Cita de: Kaxperday en 20 Junio 2015, 03:14 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:



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

VB.Net:
Código (vbnet) [Seleccionar]
   Public Shared Function GetDefaultGateway() As IPAddress
       Dim card As NetworkInterface = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault()
       If card Is Nothing Then
           Return Nothing
       End If
       Dim address As GatewayIPAddressInformation = card.GetIPProperties().GatewayAddresses.FirstOrDefault()
       Return address.Address
   End Function


C#:
Código (csharp) [Seleccionar]
public static IPAddress GetDefaultGateway()
{
   var card = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault();
   if(card == null) return null;
   var address = card.GetIPProperties().GatewayAddresses.FirstOrDefault();
   return address.Address;
}


(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.

> 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!








123456

El .1 viene de un acuerdo común, pero no es una regla, simplemente una preferencia

yum-kax

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.



Slava_TZD

#5
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í:

char* GetGatewayForInterface(const char* interface)
{
    char* gateway = NULL;

    char cmd [1000] = {0x0};
    sprintf(cmd,"route -n | grep %s  | grep 'UG[ \t]' | awk '{print $2}'", interface);
    FILE* fp = popen(cmd, "r");
    char line[256]={0x0};

    if(fgets(line, sizeof(line), fp) != NULL) { gateway = line; }
    pclose(fp);
}

Cita de: yum-kax en 20 Junio 2015, 04:05 AM
Con lo cual se estima que la 192.168.x.1 es gateway y .255 es broadcast.

Sure...192.168.1.1/27


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

MinusFour

#6
Cita de: 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.

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.

Kaxperday

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!
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Slava_TZD



The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

Kaxperday

#9
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

Saludos y gracias a todos por la ayuda.  :rolleyes: :rolleyes: ;-)
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.