Tests de brokers

Vérifier si un port MQTT est ouvert (nc, telnet, nmap)

Vérifiez si les ports MQTT 1883, 8883, 8083 ou 8084 sont ouverts avec nc, telnet, nmap et Test-NetConnection, et distinguez pare-feu et broker.

Mis à jour · 7 min de lecture

Vérifier si un port MQTT est ouvert (nc, telnet, nmap)

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

PortTransportUsage courant
1883MQTT sur TCPMQTT non chiffré, développement, réseaux de confiance
8883MQTT sur TLSAppareils en production
8083 / 8080MQTT sur WebSocketNavigateurs sur pages http, outils locaux
8084 / 8443 / 443MQTT 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.

Check one port
nc -vz -w 5 broker.connectmq.com 1883
Possible results
Connection 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 out

Le 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 :

All MQTT ports
for p in 1883 8883 8083 8084; do nc -vz -w 5 broker.connectmq.com "$p"; done

Pas de nc installé ? Bash peut ouvrir un socket TCP tout seul :

Bash only
timeout 5 bash -c '</dev/tcp/broker.connectmq.com/1883' && echo open || echo closed

telnet

telnet est encore installé sur de nombreux serveurs et fonctionne sous Windows une fois la fonctionnalité Client Telnet activée :

telnet
telnet broker.connectmq.com 1883
Output
Trying 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
nmap -Pn -p 1883,8883,8083,8084 broker.connectmq.com
Example output (8084 blocked by a local firewall)
PORT     STATE    SERVICE
1883/tcp open     mqtt
8883/tcp open     secure-mqtt
8083/tcp open     us-srv
8084/tcp filtered websnp
ÉtatSignification
openQuelque chose a accepté la connexion TCP
closedHôte joignable, rien n'écoute (reset TCP)
filteredAucune 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

PowerShell
Test-NetConnection broker.connectmq.com -Port 1883
Output
ComputerName     : broker.connectmq.com
RemoteAddress    : 203.0.113.10
RemotePort       : 1883
TcpTestSucceeded : True

En 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ésultatSignificationOù chercher
Open / succeededTCP fonctionne de bout en boutMontez d'une couche : TLS et MQTT (ci-dessous)
Connection refusedHôte atteint, aucun listener sur ce portLe broker tourne-t-il ? Sur quelle adresse et quel port écoute-t-il ?
Timed out / filteredPaquets supprimés quelque partPare-feu de l'hôte, security group cloud, proxy d'entreprise, mauvaise IP
Nom non résoluProblème DNS, pas de portVé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 :

Linux / macOS
sudo ss -ltnp | grep -E '1883|8883'        # Linux
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -E '1883|8883'   # macOS
Windows
netstat -ano | findstr :1883

Un 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 :

mosquitto.conf
listener 1883 0.0.0.0
allow_anonymous false
password_file /etc/mosquitto/passwd

Le 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 :

TLS: does the port speak TLS, and which certificate?
openssl s_client -connect broker.connectmq.com:8883 -servername broker.connectmq.com </dev/null
MQTT: does the broker answer CONNECT with CONNACK?
mosquitto_pub -h broker.connectmq.com -p 1883 -t testmqtt/port-check/ping -m ok -d

Avec -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.