2010-06-23 3 views
2

Essayer de connecter un tunnel SSH d'un port localhost sur ma machine à un port interne de l'autre côté d'un serveur SSH accessible via Internet en utilisant Putty. Putty ne vérifie pas si le port est disponible. Avant d'ouvrir la connexion Putty, je voudrais vérifier que le port est libre.C# Bien sûr Fire Way pour détecter l'utilisation du port

Cela fonctionne très bien si le port est disponible, mais j'ai besoin d'un moyen sûr de feu pour garantir que le port n'est pas ouvert au moment où je le vérifie dans mon code. J'ai utilisé diverses méthodes avec de mauvais résultats. J'utilise actuellement le code suivant:

bool IsBusy(int port) 
    { 
     IPGlobalProperties ipGP = IPGlobalProperties.GetIPGlobalProperties(); 
     IPEndPoint[] endpoints = ipGP.GetActiveTcpListeners(); 
     if (endpoints == null || endpoints.Length == 0) return false; 
     for (int i = 0; i < endpoints.Length; i++) 
      if (endpoints[i].Port == port) 
       return true; 
     return false; 
    } 

J'ai uTorrent installé sur l'ordinateur. Lorsque j'essaie d'utiliser le port 3390, il échoue car uTorrent écoute sur ce port via TCP. Y at-il un moyen de s'assurer que TCP n'est pas utilisé du tout sur un port donné?

Répondre

1

Très bien, étant donné que vous ne vous souciez pas des conditions de course.

Essayez de lier() un socket() au port de l'adresse IP générique (0.0.0.0). Si cela réussit, personne n'a le port. (Bien sûr, maintenant vous avez le port alors n'oubliez pas de le fermer.)

+0

Okay. Je vais donner un coup de feu ce week-end et de poster. –

3

Il y aura toujours une condition de concurrence si vous vérifiez avec un programme et attendez d'utiliser le port dans un autre. Si vous faites tout depuis un programme Vous pouvez créer un socket et le lier au port 0 et le système sélectionnera un port libre pour vous afin que vous ne soyez jamais en conflit avec un autre processus.

+0

Je ne m'attends pas à une fin tout être ... Je me rends compte qu'un port peut être pris entre test et utilisation. Ma seule préoccupation avec cette application est de s'assurer que le test du port est vraiment disponible au moment du test ... aucune question posée. Le code ci-dessus échoue ... d'où la question. Je veux juste tester le port et s'il est disponible, pointez Putty pour l'attraper. –

Questions connexes