c# - que - instalacion y configuracion de windows server 2012 pdf
¿Cómo controlo programáticamente para ver a qué dominio estoy conectado? (6)
Si estoy conectado a la LAN local aquí en el trabajo, necesito que mi aplicación acceda a nuestro servidor a través de una IP interna; de lo contrario, tendré que usar nuestra IP externa cuando esté en libertad.
Actualmente, intento conectarme a través de la IP local y luego probar con la externa si falla ... pero el tiempo de espera demora demasiado y me pregunto si hay una forma de averiguar a qué dominio está conectada la máquina antes de intentarlo .
Edit: Patrick> Esencialmente, la aplicación se ejecuta en una tableta que está conectada a la red local un par de veces al día. Es aproximadamente igual entre la cantidad de veces que se conecta a través de la red y las veces que se conecta localmente.
Todas las máquinas tienen una cuenta de dominio cuando están conectadas a la red (y tienen cuentas de dominio con una convención de nomenclatura como "LOCTabletx", donde x es un número dado a la máquina cuando está fantasma.
Lo que estoy buscando es una manera rápida de ver si la máquina está conectada a nuestra red local o a internet. Usar Environment.UserDomainName me da LOCTabletx y no el nombre de dominio.
EDITAR
Si ayuda a alguien, intento DNS Resolver el nombre de una máquina que puedo garantizar que estará en la red (uno de los servidores). Funciona lo suficientemente bien para mí.
Desea ver la API de reconocimiento de ubicación de red . Disponible en Windows Vista o posterior, le permite descubrir de manera programática a qué red está conectado y recibir notificaciones cuando esto cambie.
Puede ser familiar para usted en la forma de "¿Es esta una red doméstica / laboral / pública?" caja de diálogo.
Has probado:
Environment.UserDomainName
También podría echar un vistazo a las direcciones IP activas en la máquina y consultar una que funcione en su red local ...
var x = NetworkInterface.GetAllNetworkInterfaces()
.Where(ni => ni.OperationalStatus == OperationalStatus.Up)
.SelectMany(ni => ni.GetIPProperties().UnicastAddresses);
// do something with the collection here to determine if you''re on the right network.
// just looping & printing here for example.
foreach (var item in x)
{
Console.WriteLine(item.Address);
}
Y una vez que haya descubierto la red en la que se encuentra, puede suscribirse al evento System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged para administrar las redes de salto de su computadora mientras se ejecuta su aplicación.
Otra forma, pero no sé si en realidad es mejor que las otras soluciones es:
System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType
esta es una cadena que devuelve "Kerberos" en el directorio activo. Sin embargo, no estoy seguro de lo que diría cuando no esté conectado al dominio.
System.Environment.UserDomainName
Environment.UserDomainName
... le proporciona el nombre de la máquina si no está unido a un dominio. Le proporciona el nombre de dominio si está unido a un dominio. Si toma una máquina que está unida a un dominio fuera de la red y sale "en la naturaleza", Environment.UserDomainName
continuará proporcionando el nombre de dominio aunque reinicie e inicie sesión (en su cuenta de dominio). Su máquina almacena en caché las credenciales de dominio durante aproximadamente 30 días.
Si inicia sesión en su cuenta de máquina, obtendrá el nombre de la máquina.
System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType
Esto devolverá "NTLM" cuando no esté conectado a la red.