2011-03-11 24 views
19

¿Cómo puedo obtener todas las direcciones IP conectadas a la máquina en la que se está ejecutando mi aplicación (aplicación C# NET Console)? Necesito vincular un servicio WCF a la dirección IP principal y devolver una lista de la lista completa de direcciones IP.Obtener todas las direcciones IP en la máquina

using System.Net; 

string myHostName = Dns.GetHostName().ToString(); 
string ipAddress = Dns.Resolve(HostName).AddressList[0].ToString(); 

Esto es lo que estoy utilizando ahora mismo para obtener la dirección IP primaria, pero no puedo encontrar la manera de obtener el resto de devolverlos.

Si enlace un servicio WCF a localhost: 8000, ¿eso lo expondrá en el primario?

+0

¿Qué es una dirección "IP primaria"? ¿No todas las direcciones IP nacen iguales? –

+0

AddressList es una colección y solo está utilizando el primer elemento. ¿Esa colección siempre produce como único elemento para ti? – Maciek

Respuesta

6

Creo que este ejemplo debería ayudarlo.

// Get host name 
String strHostName = Dns.GetHostName(); 

// Find host by name 
IPHostEntry iphostentry = Dns.GetHostByName(strHostName); 

// Enumerate IP addresses 
foreach(IPAddress ipaddress in iphostentry.AddressList) 
{ 
    .... 
} 

Editar:.

"No hay tal cosa como una 'dirección IP primaria'

La tabla de enrutamiento determina qué orientado hacia el exterior dirección IP se utiliza en función de la dirección IP de destino (y por extensión, la interfaz de red, que a su vez puede ser virtual o física) ".

+0

Esto típicamente devolverá lo que quiera, pero en ocasiones si hay una configuración incorrecta en DNS en el sistema, puede tener algunos problemas con Dns.GetHostByName. – MrUnleaded

+0

Esta respuesta en realidad no funciona en mi máquina. Solo devuelve 127.0.0.1, aunque tengo una conexión Wifi activa con una dirección IP real. –

-1
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName()); 
+3

Explique por qué este código ayudaría al OP a resolver su problema. –

+0

¡Gracias! Eso es agregar todo el IP a una lista de la cadena – Yanga

6

¿Por qué no vincularse a 0.0.0.0?
De esa manera se escucha en todas las direcciones IP

+1

Estaba buscando esto para vincular mi servicio WCF a todas las direcciones IP. ¡Gracias! –

1

Probablemente debería unirse a 0.0.0.0:8000, que expondrá en todas las direcciones IP disponibles y sólo se unen a una determinada dirección IP si el usuario/administrador así lo exigiera.

37

Las variantes DNS funcionan en toda la red, pero una entrada DNS puede tener muchas direcciones IP y una dirección IP puede tener muchas entradas DNS. Más importante aún, una dirección no necesita estar vinculada a una entrada de DNS en absoluto.

Para la máquina local intente lo siguiente: -

foreach (NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces()) 
    { 
    Console.WriteLine("Name: " + netInterface.Name); 
    Console.WriteLine("Description: " + netInterface.Description); 
    Console.WriteLine("Addresses: "); 
    IPInterfaceProperties ipProps = netInterface.GetIPProperties(); 
    foreach (UnicastIPAddressInformation addr in ipProps.UnicastAddresses) 
    { 
     Console.WriteLine(" " + addr.Address.ToString()); 
    } 
    Console.WriteLine(""); 
    } 
-2

Creo que el PO está pidiendo acerca de cómo obtener todas las direcciones en una NIC local, no sólo aquellas direcciones conocidas de DNS. En primaria, probablemente se refiera a la dirección principal en "usar la siguiente dirección IP" en las propiedades del adaptador, y en "el resto" probablemente se refiera a las que figuran en Advanced> (Additional) IP Addesses.

DNS no necesariamente las conocerá.

Cuestiones relacionadas