2012-10-10 24 views
6

me encontré con un fragmento de código en esta respuesta: Get IP address in a console applicationObtener todas las direcciones IP asignadas a un servidor

using System; 
using System.Net; 


namespace ConsoleTest 
{ 
    class Program 
    { 
     static void Main() 
     { 
      String strHostName = string.Empty; 
      // Getting Ip address of local machine... 
      // First get the host name of local machine. 
      strHostName = Dns.GetHostName(); 
      Console.WriteLine("Local Machine's Host Name: " + strHostName); 
      // Then using host name, get the IP address list.. 
      IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); 
      IPAddress[] addr = ipEntry.AddressList; 

      for (int i = 0; i < addr.Length; i++) 
      { 
       Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString()); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

Este código funciona bien cuando corro en forma local para obtener las direcciones IP de mi equipo. Lo que intento hacer es usar el código para obtener las direcciones IP en un servidor de mi red. Así que básicamente intenté reemplazar strHostName = Dns.GetHostName(); con strHostName = "myServerName"; pero solo devuelve una IP. Cuando ejecuto el programa en el servidor, obtengo todas las direcciones IP asignadas a ese servidor. El objetivo es ejecutar el programa en mi computadora, leer los nombres de los servidores de una tabla de base de datos para obtener las direcciones IP en más de 100 servidores. Estoy tratando de evitar tener que iniciar sesión en cada servidor y ejecutar el programa en cada uno de los servidores para obtener las direcciones IP.

Es bastante interesante que el código funcione bien para "www.google.com": ¿está relacionado este servidor o es un problema de seguridad?

Antes de que pueda comenzar a obtener datos de la base de datos, necesito que el código funcione para un servidor :) Espero que eso lo explique mejor. ¡Gracias!

+0

No he podido entender su pregunta. Considere editarlo para aclarar lo que pretende hacer. ¿Puede remotamente en un servidor y ejecutar su programa allí? Tal vez [esto] (http://serverfault.com/questions/15887/how-to-list-all-the-ip-addresses-of-a-server) podría ayudar? – kush

+1

Gracias por su respuesta. Edité la pregunta original. Gracias – nelsonGti

Respuesta

0

Podría ser que las otras direcciones IP estén siendo excluidas del DNS a propósito por el servidor. Un buen ejemplo de esta funcionalidad se puede encontrar en in this KB Article (975808).

Pruebe GetHostAddress() y verifique que obtiene el mismo resultado. Consulte MSDN: gethostaddress()

En caso de que no sea así, es posible que desee buscar otros métodos para consultar las direcciones IP.

3

¿Confunde la diferencia entre lo que DNS dice sobre el nombre que está tratando de resolver usando esos métodos, en lugar de descubrir qué direcciones IP están realmente vinculadas a la pila del protocolo TCP/IP que se ejecuta en la máquina específica que le interesa? Si desea saber las direcciones IP para las que está configurada la máquina, independientemente de lo que esté o no registrado en DNS, le recomendamos que consulte WMI para enumerar las direcciones configuradas en la máquina.

Véase el artículo: WMI Query to get IP Address, Domain Name, OS Version

En el código anterior, están simplemente pidiendo la máquina local el código se ejecuta en, al utilizar su resolución de DNS configurado y decirle qué entradas existen como registros DNS para el nombre que está usando para consultar. Es por eso que puede obtener un valor cuando intenta hacer una consulta para algo como www.google.com. Es porque simplemente busca un nombre en DNS y dado que se trata de un nombre públicamente reconocible, cualquier servidor DNS configurado correctamente podrá informar un valor válido.

Esto es muy diferente de lo que las direcciones IP pueden estar vinculadas al servidor. Por ejemplo, piense en un servidor sentado detrás de un firewall. El servidor podría estar usando Direcciones IP que son locales a la red interna que están asignadas a direcciones IP de acceso público en el firewall. En ese caso, las direcciones IP que conoce el servidor son completamente diferentes de las direcciones IP públicas que se mostrarían en sus correspondientes entradas de DNS.

Cuestiones relacionadas