web-dev-qa-db-fra.com

Comment vérifier si un port est bloqué sur une machine Windows?

Sur la plate-forme Windows, quelles options natives dois-je pour vérifier si un port (3306, par exemple) sur ma machine locale (comme dans localhost), est bloqué?

109
Boris Pavlović

Puisque vous êtes sur la machine Windows, ces choses peuvent être faites,

  • Exécutez la commande suivante et recherchez un écouteur ": 3306" (vous n'avez pas mentionné UDP/TCP). Cela confirmera qu'il y a quelque chose en cours d'exécution sur le port.

    netstat -a -n

  • Après cela, si vous attendez des connexions entrantes sur ce port et pensez que le pare-feu peut les bloquer, vous pouvez démarrer la journalisation du pare-feu Windows et vérifiez les journaux pour les connexions interrompues

    • Accédez au Pare-feu Windows, Paramètres avancés
    • Cliquez sur le bouton Paramètres à côté de "Connexion au réseau local"
    • Sélectionnez "Enregistrer les paquets perdus"
    • Regardez l'emplacement du fichier journal (s'il n'est pas présent, définissez-en un)
    • Cliquez sur OK
    • Maintenant, lorsque la tentative de connexion est effectuée (en supposant que vous savez quand cela est fait), consultez le fichier journal pour une baisse sur le port 3306.
    • Si cela se produit, vous souhaiterez ajouter une exception pour ce port.
  • Il existe une autre commande pour vérifier l'état du pare-feu
    (Mise à jour pour les utilisateurs de Windows 7 - comme indiqué par Nick ci-dessous - utilisez netsh advfirewall pare-feu )

    état d'affichage du pare-feu netsh

    • cela listera les ports bloqués ainsi que les ports d'écoute actifs avec les associations d'application
  • Cette commande videra les détails de configuration du pare-feu Windows

    configuration du show pare-feu netsh


Si vous avez un bloc actif (les connexions entrantes sont interrompues par le pare-feu) après avoir commencé la journalisation, vous devriez le voir dans le journal.

Si vous exécutez une application/un service qui écoute sur 3306, le configuration du pare-feu devrait montrer qu'il est activé. Si ce n'est pas le cas, vous avez probablement manqué l'ajout d'une exception avec le pare-feu pour autoriser cette application/ce service.

Enfin, le port 3306 est généralement utilisé pour MySQL. Donc, je suppose que vous exécutez le serveur MySQL sur cette machine Windows. Vous devriez donc voir un écouteur pour 3306 accepter les connexions entrantes. Si vous ne voyez pas cela, vous devez d'abord travailler avec votre application (MySQL) pour commencer.

113
nik

NETSTAT vous dira si le port écoute mais il ne vous dira pas si le port est ouvert pour le monde extérieur. Ce que je veux dire par là, c'est que NETSTAT peut montrer que le 0.0.0.0 ÉCOUTE sur le port 3306 mais qu'un pare-feu peut toujours bloquer ce port qui empêche les connexions extérieures; il n'est donc pas suffisant de s'appuyer uniquement sur NETSTAT.

La meilleure façon de vérifier si un port est bloqué est d'effectuer une analyse de port à partir de la machine cliente.

Il existe de nombreuses façons de faire une analyse de port, mais comme vous avez mentionné être sous Windows, je proposerai l'utilitaire de ligne de commande Microsoft PortQry et la version graphique PortQryUI

Pour tester tous les ports ouverts:

portqry.exe -n #.#.#.#   

Pour tester un port spécifique:

portqry.exe -n #.#.#.# -e #

Par exemple, pour tester l'interface Web d'un routeur à 192.168.1.1:

portqry.exe -n 192.168.1.1 -e 80

Qui retourne:

TCP port 80 (http service): LISTENING

Où en tant que test sur une machine locale sans exécution de HTTPD renvoie:

TCP port 80 (http service): NOT LISTENING

En utilisant un utilitaire PortScan, vous obtiendrez l'un des 3 résultats.

  • Listening signifie que le serveur écoute sur le port spécifié
  • Filtered signifie qu'il a reçu un TCP avec l'indicateur de réinitialisation défini, ce qui indique probablement un problème de pare-feu ou de logiciel
  • Not Listening signifie qu'il n'a reçu aucune réponse

telnet est une autre option de ligne de commande qui est généralement installée par défaut sur le système d'exploitation. Cet utilitaire de ligne de commande peut être utilisé rapidement pour voir si un port répond à une demande réseau.

Pour utiliser telnet, vous devez simplement émettre la commande suivante à partir d'une invite de commande:

telnet localhost 3306

La commande ci-dessus devrait vous donner une indication rapide si le port 3306 sur le localhost répond.

25
Tim Penner

Depuis PowerShell 4.0, vous pouvez utiliser la commande Test-NetConnection

Si vous souhaitez tester le port 3306 comme dans votre exemple, la commande est

Test-NetConnection -ComputerName localhost -Port 3306

documentation TechNet Test-NetConnection

21
Marcel Janus

Si vous pouvez telnet sur le port à partir de la machine locale (en utilisant l'adresse IP externe), mais pas à partir d'une autre machine - alors il est bloqué quelque part entre les deux.

Notez qu'un pare-feu sur votre machine locale pourrait empêcher même la première action.

5
Brent