2010-06-17 22 views
1

Dans certains champs de mon application Windows Forms, je demande à un utilisateur de fournir une adresse IP ou un nom d'hôte. Existe-t-il une bonne expression régulière (regex) pour valider la valeur entrée? Ou y a-t-il une autre méthode que je devrais envisager? S'il vous plaît noter que je préférerais que l'utilisateur entre un FQDN ou une adresse IP.Validez une adresse IP ou un nom d'hôte saisi par l'utilisateur via C#

+1

ne pas oublier de prendre en compte les implications des adresses IPv6 si tu veux thi s application pour durer. –

+0

duplication possible de [Expression régulière correspondant au nom d'hôte ou à l'adresse IP?] (Http://stackoverflow.com/questions/106179/regular-expression-to-match-hostname-or-ip-address) – jjnguy

+0

jjnguy - N'a pas voulu dire republier. Je vais vérifier cela et mes excuses si je l'ai fait. Dave - j'ai regardé cet aspect moi-même et je me rends compte que je suis peut-être sur le mauvais chemin dans mon application pour le moment car il est basé uniquement sur IPv4. Suis très inquiet à ce sujet. –

Répondre

2

Dans l'intérêt de la pérennité de votre application, je suggère simplement d'utiliser IPAddress.TryParse() pour déterminer si l'entrée est une adresse IP.

La vérification d'un nom d'hôte 'valide' est plus difficile, également parce que vous n'avez pas spécifié si le nom d'hôte doit exister ou non. Si c'est le cas, le plus simple serait d'utiliser Dns.GetHostEntry() pour voir si cela donne un résultat. Vous ne pouvez pas obtenir une validation beaucoup plus précise basée sur la description que vous avez donnée.

+0

Dns.GetHostEntry() serait-il utile si l'utilisateur tapait un hôte puis cliquait sur un bouton pour valider l'entrée de l'hôte ... comme le bouton Vérifier les noms dans les champs liés à Active Directory? –

+0

Certainement, j'ai vu cela fait dans plusieurs outils, le premier qui vient à l'esprit est IIS SMTP Server Config (lors de la définition du FQDN du serveur). – ErikHeemskerk

+0

Voir [IPAddress.AddressFamily] (https://msdn.microsoft.com/fr-fr/library/system.net.ipaddress.addressfamily.aspx) pour faire la distinction entre une adresse IPv4 et IPv6. Voir aussi [cette réponse] (http://stackoverflow.com/a/53500/1497596). – DavidRR

1

Pourquoi auriez-vous besoin de demander l'adresse IP et le nom d'hôte d'une application Windows Form? Si ce sont les détails locaux de PC, vous pouvez obtenir ces de: -

1) Pour obtenir le nom d'hôte, vous pouvez appeler Dns.GetHostName() (voir MSDN reference)

2) Pour obtenir l'adresse IP adresse, vous pouvez énumérer l'adresse IP via Dns.GetHostByName() (voir MSDN reference)

+0

Les données ne seront pas utilisées pour tester des éléments sur le système local. Il serait utilisé pour déterminer si un serveur SSH existe et si les données entrées par un utilisateur sont réelles (comme dans blahblahblah == faux, 66.234.34.23 == correct). Cette question traite complètement des hôtes distants. –

+0

@ThaKidd, merci pour la clarification. Sur la note, je pense que vous pouvez toujours utiliser Dns.GetHostByName (nom d'hôte) pour vérifier si le nom d'hôte est valide. Idem pour l'adresse IP que vous pouvez utiliser Dns.GetHostByAddress() pour vérifier l'adresse. – Syd

+1

Dns.GetHostByName et Dns.GetHostByAddress ont tous deux été marqués obsolètes. – ErikHeemskerk