Pour vérifier si un port MQTT est ouvert, lancez nc -vz -w 5 broker.connectmq.com 1883 sous Linux ou macOS, ou Test-NetConnection broker.connectmq.com -Port 1883 dans PowerShell. "Succeeded" signifie qu'une connexion TCP a été acceptée ; "refused" ou "timed out" vous indique où chercher ensuite. Ce guide présente chaque outil, la signification de sa sortie et la façon de distinguer un problème de pare-feu d'un problème de broker.
Les ports à vérifier
| Port | Transport | Usage courant |
|---|---|---|
| 1883 | MQTT sur TCP | MQTT non chiffré, développement, réseaux de confiance |
| 8883 | MQTT sur TLS | Appareils en production |
| 8083 / 8080 | MQTT sur WebSocket | Navigateurs sur pages http, outils locaux |
| 8084 / 8443 / 443 | MQTT sur WebSocket sécurisé | Navigateurs, réseaux restrictifs |
Les numéros exacts dépendent de la configuration du broker — voir les ports MQTT expliqués. Dans les exemples, nous utilisons broker.connectmq.com, qui écoute sur 1883, 8883, 8083 et 8084.
nc (netcat) — Linux et macOS
nc -z ouvre une connexion TCP et la referme sans envoyer de données ; -v affiche le résultat et -w 5 abandonne au bout de cinq secondes.
nc -vz -w 5 broker.connectmq.com 1883Connection to broker.connectmq.com port 1883 [tcp/ibm-mqtt] succeeded!
nc: connect to broker.connectmq.com port 1883 (tcp) failed: Connection refused
nc: connect to broker.connectmq.com port 1883 (tcp) failed: Connection timed outLe libellé exact varie selon les variantes de netcat (macOS affiche connectx to ..., certaines versions affichent open), mais les trois résultats sont toujours les mêmes. Vérifiez tous les ports MQTT d'un coup :
for p in 1883 8883 8083 8084; do nc -vz -w 5 broker.connectmq.com "$p"; donePas de nc installé ? Bash peut ouvrir un socket TCP tout seul :
timeout 5 bash -c '</dev/tcp/broker.connectmq.com/1883' && echo open || echo closedtelnet
telnet est encore installé sur de nombreux serveurs et fonctionne sous Windows une fois la fonctionnalité Client Telnet activée :
telnet broker.connectmq.com 1883Trying 203.0.113.10...
Connected to broker.connectmq.com.
Escape character is '^]'.Connected to signifie que le port est ouvert. Appuyez sur Ctrl+] puis tapez quit pour sortir. Si vous voyez plutôt telnet: Unable to connect to remote host: Connection refused, rien n'a accepté la connexion ; une longue pause suivie de Connection timed out désigne un filtre sur le chemin. Ne tapez rien après la connexion — MQTT est un protocole binaire, et le broker fermera la connexion à l'expiration de son délai de connexion faute de paquet CONNECT valide. C'est normal.
nmap — plusieurs ports et leur état
nmap indique un état clair pour chaque port, ce qui en fait le meilleur outil pour distinguer "closed" de "filtered" :
nmap -Pn -p 1883,8883,8083,8084 broker.connectmq.comPORT STATE SERVICE
1883/tcp open mqtt
8883/tcp open secure-mqtt
8083/tcp open us-srv
8084/tcp filtered websnp| État | Signification |
|---|---|
open | Quelque chose a accepté la connexion TCP |
closed | Hôte joignable, rien n'écoute (reset TCP) |
filtered | Aucune réponse — un pare-feu a supprimé la sonde |
-Pn saute le ping préalable, que beaucoup d'hôtes cloud bloquent. La colonne SERVICE n'est qu'une supposition de nmap d'après le numéro de port, pas la preuve que MQTT tourne derrière.
PowerShell Test-NetConnection — Windows
Test-NetConnection broker.connectmq.com -Port 1883ComputerName : broker.connectmq.com
RemoteAddress : 203.0.113.10
RemotePort : 1883
TcpTestSucceeded : TrueEn cas d'échec, vous verrez WARNING: TCP connect to (203.0.113.10 : 1883) failed et TcpTestSucceeded : False. Utilisez -InformationLevel Quiet pour obtenir seulement True / False dans un script. Si un broker local est injoignable depuis d'autres machines, le pare-feu Windows Defender est une cause fréquente — voir MQTT et le pare-feu Windows.
Lire le résultat : pare-feu ou broker ?
| Résultat | Signification | Où chercher |
|---|---|---|
| Open / succeeded | TCP fonctionne de bout en bout | Montez d'une couche : TLS et MQTT (ci-dessous) |
| Connection refused | Hôte atteint, aucun listener sur ce port | Le broker tourne-t-il ? Sur quelle adresse et quel port écoute-t-il ? |
| Timed out / filtered | Paquets supprimés quelque part | Pare-feu de l'hôte, security group cloud, proxy d'entreprise, mauvaise IP |
| Nom non résolu | Problème DNS, pas de port | Vérifiez le nom d'hôte — voir tester le DNS et le réseau |
Ensuite, refaites la même vérification depuis un second réseau — le partage de connexion de votre téléphone, une VM cloud, la machine d'un collègue. Si le port est ouvert depuis l'extérieur mais pas depuis votre bureau, c'est votre réseau qui le bloque (fréquent pour 1883 et 8883 sur les réseaux d'entreprise et Wi-Fi invités ; voir MQTT derrière un pare-feu d'entreprise). S'il est fermé partout, le problème vient du broker.
Sur l'hôte du broker : quelque chose écoute-t-il ?
Si vous gérez le broker vous-même et obtenez "refused", vérifiez ce qui écoute :
sudo ss -ltnp | grep -E '1883|8883' # Linux
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -E '1883|8883' # macOSnetstat -ano | findstr :1883Un listener sur 127.0.0.1:1883 n'accepte que les connexions locales. Mosquitto 2.x fait cela par défaut quand aucun listener n'est configuré et journalise Starting in local only mode. Connections will only be possible from clients running on this machine. Ajoutez un listener explicite (et une authentification) pour accepter les clients distants :
listener 1883 0.0.0.0
allow_anonymous false
password_file /etc/mosquitto/passwdLe générateur de configuration Mosquitto produit un fichier complet avec listeners TLS et WebSocket. Sous Docker, vérifiez aussi que le port est publié (-p 1883:1883).
Port ouvert, mais toujours pas de connexion ? Testez la couche suivante
Un port ouvert prouve seulement que TCP fonctionne. Deux vérifications rapides couvrent les couches supérieures :
openssl s_client -connect broker.connectmq.com:8883 -servername broker.connectmq.com </dev/nullmosquitto_pub -h broker.connectmq.com -p 1883 -t testmqtt/port-check/ping -m ok -dAvec -d, un broker sain affiche une ligne sending CONNECT suivie de received CONNACK (0). Un CONNACK non nul signale un problème d'authentification ou de protocole — cherchez le code avec l'outil des reason codes. Si TLS reste bloqué sur 1883 ou si MQTT échoue sur 8883, vous avez inversé le port en clair et le port TLS. Les erreurs de certificat sont traitées dans tester une connexion TLS. Enfin, connectez-vous avec le client MQTT en ligne pour confirmer un aller-retour publish/subscribe complet.
Confirmer avec un vrai aller-retour MQTT
Vérifier un port prend quelques secondes et coupe le problème en deux : si TCP échoue, c'est une question de réseau, de pare-feu ou de listener ; si TCP réussit, regardez TLS, les identifiants et MQTT lui-même. Faites la vérification depuis plusieurs réseaux, lisez "refused" et "timed out" différemment, et vous saurez où chercher avant d'ouvrir le moindre fichier de log.
Questions fréquentes
Comment vérifier si le port 1883 est ouvert ?
Lancez nc -vz -w 5 hôte 1883 sous Linux ou macOS, ou Test-NetConnection hôte -Port 1883 dans PowerShell sous Windows. "succeeded" ou TcpTestSucceeded : True signifie qu'une connexion TCP a été acceptée ; refused ou timed out signifie qu'elle ne l'a pas été.
Quelle différence entre connection refused et timed out ?
Refused signifie que l'hôte a répondu mais que rien n'écoute sur ce port (ou qu'un pare-feu a rejeté activement). Timed out signifie aucune réponse, ce qui indique généralement un pare-feu ou un security group qui supprime les paquets en silence, une mauvaise IP ou un problème de routage.
Le port est ouvert mais mon client MQTT ne se connecte toujours pas. Pourquoi ?
Un port ouvert prouve seulement que TCP fonctionne. L'échec se situe alors au niveau TLS ou MQTT : mauvais port pour TLS ou TCP simple, problème de certificat, port WebSocket utilisé pour du MQTT brut, identifiants erronés ou client ID refusé. Vérifiez le reason code du CONNACK avec mosquitto_pub -d.


