Encontrar alias de red en .net
-
09-06-2019 - |
Pregunta
¿Hay alguna forma en .net 2.0 de descubrir el alias de red de la máquina en la que se ejecuta mi código?Específicamente, si mi grupo de trabajo ve mi máquina como //jekkedev01, ¿cómo recupero ese nombre mediante programación?
Solución
Dado que puede tener múltiples interfaces de red, cada una de las cuales puede tener múltiples IP, y cualquier IP puede tener múltiples nombres que puedan resolverse, puede haber más de una.
Si desea conocer todos los nombres por los cuales su servidor DNS conoce su máquina, puede recorrerlos todos de esta manera:
public ArrayList GetAllDnsNames() {
ArrayList names = new ArrayList();
IPHostEntry host;
//check each Network Interface
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) {
//check each IP address claimed by this Network Interface
foreach (UnicastIPAddressInformation i in nic.GetIPProperties().UnicastAddresses) {
//get the DNS host entry for this IP address
host = System.Net.Dns.GetHostEntry(i.Address.ToString());
if (!names.Contains(host.HostName)) {
names.Add(host.HostName);
}
//check each alias, adding each to the list
foreach (string s in host.Aliases) {
if (!names.Contains(s)) {
names.Add(s);
}
}
}
}
//add "simple" host name - above loop returns fully qualified domain names (FQDNs)
//but this method returns just the machine name without domain information
names.Add(System.Net.Dns.GetHostName());
return names;
}
Otros consejos
Si necesita la descripción de la computadora, se almacena en el registro:
- llave:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
- nombre del valor:
srvcomment
- tipo de datos:
REG_SZ (string)
AFAIK, no tiene nada que ver con ningún servidor de dominio ni con la red a la que está conectada la PC.
Para todo lo relacionado con la red, estoy usando lo siguiente:
- Nombre de NETBIOS:
System.Environment.MachineName
- nombre de host:
System.Net.Dns.GetHostName()
- Nombre DNS:
System.Net.Dns.GetHostEntry("LocalHost").HostName
Si la PC tiene varios nombres NETBIOS, no conozco otro método que agrupar los nombres según la dirección IP a la que se resuelven, e incluso esto no es confiable si la PC tiene múltiples interfaces de red.
No soy un programador .NET, pero el System.Net.DNS.GetHostEntry El método se parece a lo que necesitas.Devuelve una instancia del EntradaIPHost clase que contiene el Alias propiedad.
Utilizar el Sistema.Entorno clase.Tiene una propiedad para recuperar el nombre de la máquina, que se recupera de NetBios.A menos que no entienda bien tu pregunta.
o Nombre.de.mi.computadora