2010-01-29 4 views
2

Quelle est la meilleure façon de vérifier si le client dispose d'un port ouvert , et si elle est transmis correctement?Vérifiez si le port client est ouvert et transmis [C#, ASP.NET]

L'application fonctionne comme ceci actuellement:

  1. client crée une socket pour les connexions entrantes et veut informer tout le monde sur son port ouvert. Le client essaie également de configurer la redirection de port en utilisant UPnP (mais il n'est pas toujours présent et activé).
  2. Le client envoie ensuite son port au serveur "central" connu.
  3. Le serveur doit vérifier si le port est ouvert (renvoyé correctement) et renvoyer son état.
  4. En cas de problème de transfert, le client en informera l'utilisateur.

Le but est d'avoir une information de port IP + sauvegardée sur le serveur pour pouvoir la donner à d'autres clients. Je pourrais essayer d'ouvrir un Socket du serveur au client et voir si cela échoue, mais y a-t-il une manière plus facile (plus rapide) de le faire?

Par exemple, ce site fait quelque chose comme ça: http://www.canyouseeme.org/

+0

Le terme "ping" peut être un peu déroutant ici. Vous ne pouvez pas exécuter une commande ping sur un port spécifique, car le ping implique des paquets ICMP plutôt que TCP. Ils n'ont pas de concept de numéro de port. – Thorarin

+0

Correct, pas le meilleur choix de mots. – Groo

Répondre

1

Non, il n'y a pas.
Pour vérifier si une connexion peut être établie, vous devez essayer d'établir une connexion :) L'utilisation d'un Socket est un moyen judicieux de le faire.

Vous pouvez éventuellement ignorer cette étape pour certains clients en vérifiant si l'ordinateur possède une adresse IP publique ou locale. Pourtant, il y a la possibilité de pare-feu d'entreprise et des choses comme ça, alors essayer d'ouvrir une connexion est le moyen le plus sûr d'aller. L'utilisation d'une requête d'écho ICMP (ping) n'est pas une option, car ICMP est un protocole différent de TCP (ou UDP) qui n'a pas de concept de numéro de port. Ping peut être utilisé pour déterminer si une adresse IP est accessible, mais cela n'a aucune valeur ajoutée à votre cas.

+0

Alors, comment ça marche alors: http://www.canyouseeme.org/? – Groo

+0

@Groo: en essayant d'ouvrir une socket comme vous l'avez décrit? – Thorarin

+0

Oh, d'accord, je pensais que tu avais dit que ce n'était pas possible du tout. ;) Ok, ce n'est pas vraiment un problème, je pensais que quelque chose comme ping pourrait être possible (utiliser le moins de ressources possible). – Groo

Questions connexes