2010-02-16 8 views
5

¿Cuál es la forma más fácil de encontrar la siguiente dirección IP no utilizada en una subred de adaptadores locales?¿La forma más fácil de encontrar IPAddress gratis en la subred actual?

IPAddress GetNextFreeIP(NetworkInterface intface) 
{ 
    ...? 
} 

actualización
He escrito un servidor BOOTP/TFTP que se podría utilizar en muchos escenarios diferentes (más de cruzada por cable, pequeña red privada, una gran red corporativa). Tengo que dar el pequeño sistema integrado Estoy actualizando una dirección IP y me gustaría encontrar una de repuesto para usar ...

+3

¿Puede preguntar al servidor DHCP? – David

+0

Su programa probablemente debería ser capaz de aceptar opciones de línea de comando para dirigirlo a usar DHCP, una IP estática o (como último recurso) adivinar utilizando su 'GetNextFreeIP'. – meagar

Respuesta

0

Todos están técnicamente en lo cierto cuando dicen que no hay forma de garantizar que no se esté utilizando una IP. Pero he decidido confiar en esto por ahora ...

public static IPAddress FindNextFree(this IPAddress address) 
    { 
     IPAddress workingAddress = address; 
     Ping pingSender = new Ping(); 

     while (true) 
     { 
      byte[] localBytes = workingAddress.GetAddressBytes(); 

      localBytes[3]++; 
      if (localBytes[3] > 254) 
       localBytes[3] = 1; 

      workingAddress = new IPAddress(localBytes); 

      if (workingAddress.Equals(address)) 
       throw new TimeoutException("Could not find free IP address"); 

      PingReply reply = pingSender.Send(workingAddress, 1000); 
      if (reply.Status != IPStatus.Success) 
      { 
       return workingAddress; 
      } 
     } 
    } 
1

Si tiene rangos de IP administrados por DHCP, tiene una instancia que puede hablar a - el servidor DHCP (como David recomendado)

Si no tiene rangos de IP administrados y no hay otra instancia con la que pueda hablar, no hay una manera confiable de saber si se usa o no una IP. IP no ofrece dicho servicio en sí mismo.

+0

+1 para DHCP, ya que este es ** exactamente ** el problema que DHCP fue diseñado para resolver! – Aaronaught

+0

Bueno, DHCP podría configurarse para dar direcciones de, por ejemplo, 192.168.1.1/24 a 192.168.1.128/24, mientras que las direcciones de 192.158.1.128/24 a 192.168.1.254/24 se asignan de forma manual. ¿Qué tipo de información obtendrá de DHCP en este escenario? La única respuesta correcta a la pregunta original es * "no se puede" *, como señalaron @tuinstoelen y @ Thorsten79. –

0

La respuesta corta es que no se puede, como acaba de decir Thorsten79.

Una respuesta un poco más largo:

Depende de la configuración de su red: cómo el administrador ha decidido asignar direcciones IP. Por lo general, hay una combinación de direcciones IP asignadas manualmente para servidores, enrutadores, etc., y un conjunto de direcciones IP asignadas dhcp para estaciones de trabajo y demás.

Si puede hablar con el servidor dhcp, puede averiguar qué direcciones en el rango reservado son gratuitas, pero para el resto de las direcciones no puede encontrarlas.

¿La pregunta más interesante es qué estás tratando de lograr? Tal vez se puede realizar de una manera diferente?

1

Además de preguntarle al servidor DHCP, creo que podría hacer un ping de difusión en la subred y recoger las respuestas de todas las computadoras y simplemente ordenar las direcciones IP para encontrar la siguiente. Esto supone, por supuesto, que todos los dispositivos están en línea y responde a las transmisiones. Entonces, en un ambiente bastante controlado, esto podría funcionar.

+0

El problema es que en una red lo suficientemente avanzada que nunca se puede saber qué hosts están activos, qué enrutadores filtran sus paquetes de ping, etc. - No hay una manera confiable de que esto en IP en sí mismo tristemente. – Thorsten79

0

Por lo que he visto de dispositivos integrados con un servidor TFTP, arrancan con una dirección IP codificada que está documentada. Después de un período de tiempo establecido (~ 3-10 segundos), el gestor de arranque transfiere el control a la aplicación que lee su configuración y establece la dirección IP.

Si alguien quiere usar el gestor de arranque para cargar el nuevo firmware, entonces necesita leer la documentación, asegurarse de que la dirección IP es alcanzable (en la misma subred), reiniciar el dispositivo y TFTP la aplicación al dispositivo .

+0

Este dispositivo usa BOOTP para obtener su dirección IP y la dirección del servidor TFTP ... – Tim

Cuestiones relacionadas