8
votes

Comment vérifier par programme de manière programmatique pour voir quel domaine je suis connecté?

Si je suis connecté au réseau local ici au travail, j'ai besoin d'accéder à mon application à notre serveur via une adresse IP interne, sinon, je devrai utiliser notre adresse IP externe quand dans la nature.

Actuellement, j'essaie juste de vous connecter via l'IP locale, puis d'essayer l'extérieur si elle échoue ... mais le délai d'attente prend un peu trop longtemps et je me demandais s'il y a un moyen de savoir quel domaine la machine est connectée avant d'essayer.

Edit: Patrick> Essentiellement, l'application s'exécute sur une tablette PC connectée au réseau local plusieurs fois par jour. Il est à peu près égal entre le nombre de fois qu'il se connecte sur le réseau et les temps qu'il relie localement.

Toutes les machines ont un compte de domaine lorsqu'ils sont connectés au réseau (et ont des comptes de domaine avec une convention de dénomination similaire «LOCTABLETX» où X est un nombre donné à la machine lorsqu'il est fantomatique.

Ce que je recherche est un moyen rapide de voir si la machine est connectée sur notre réseau local ou sur Internet. Utilisation de l'environnement.UserDomainName me prend sur LocTableTex et non le nom de domaine.

modifier

Si cela aide tout le monde, j'essaie juste de résoudre le nom d'une machine que je peux garantir sera sur le réseau (l'un des serveurs). Cela fonctionne suffisamment pour moi.


1 commentaires

Êtes-vous connecté à la machine avec un compte de domaine et n'est pas simplement connecté physiquement à votre réseau de travail?


6 Réponses :


8
votes

Avez-vous essayé:

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);
}


3 commentaires

Cela ne me fait que mon nom de machine sur le domaine. Pas le nom de domaine lui-même. Par exemple, si ma Comp est localisgrmmer1 et que le domaine est company.Local, je reçois le premier et je cherche ce dernier.


C'est très étrange. Je reçois notre nom de domaine sous Vista et XP Pro. Vous pourriez peut-être utiliser cela comme une indication que vous n'êtes pas connecté au domaine?


Je reçois le nom de ma machine locale - et je ne suis pas connecté à un domaine. Cela signifie que cela vous donnera un sens, ce qui vous donnera le système authentifié votre identifiant, soit la machine locale si vous utilisez un utilisateur local ou votre domaine si vous vous connectez à un domaine.



4
votes
System.Environment.UserDomainName

1 commentaires

Cela ne fonctionne pas. Le domaine est toujours rempli, même de l'emplacement distant ou sans connexion Internet.



3
votes

Vous voulez regarder le Sensibilisation de l'emplacement du réseau API. Disponible sur Windows Vista ou ultérieurement, il vous permet de découvrir par programmation quel réseau vous êtes connecté et d'être averti lorsque cela change.

Cela peut être familier pour vous sous la forme de "Est-ce un réseau domestique / travail / public?" Boîte de dialogue.


1 commentaires

Malheureusement, les machines gagnent WinXP Pro sans possibilité de mettre à niveau. Je ferai quelques recherches pour un équivalent pour WinXP. Merci.



3
votes

Autre moyen, mais je ne sais pas si c'est en fait mieux que les autres solutions est la suivante:

System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType


0 commentaires

0
votes

environnement.userdomainname ... vous donne le nom de la machine si vous n'êtes pas rejoint à un domaine. Cela vous donne le nom de domaine si vous êtes joint à un domaine. Si vous prenez une machine qui est jointe à un domaine éteint le réseau et de sortir «dans le sauvage», environnement.userdomainname continuera de fournir le nom de domaine même si vous redémarrez et connectez-vous dans (à votre Compte de domaine). Votre machine met en cache les informations d'identification du domaine pendant environ 30 jours.

Si vous vous connectez à votre compte de votre machine, vous obtiendrez le nom de la machine.


0 commentaires

4
votes
System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType 
This will return "NTLM" when not connected to the network.

2 commentaires

Cela ne fonctionne pas. ordinateur sans carte sans fil, pas câble Ethernet non branché de retour kerberos connecté ou non


La réponse à l'époque (il y a 10 ans), était raisonnable pour la situation que l'OP décrit. Selon la configuration de domaine, le code ci-dessus aurait peut-être retourné NTLM ou Kerberos, mais je ne peux pas dire. Les deux sont des sous-systèmes Authn et, espérons-le, personne ne nomme leur domaine "NTLM" ou "Kerberose".