Testes de brokers

Como verificar se uma porta MQTT está aberta (nc, telnet, nmap)

Verifique se as portas MQTT 1883, 8883, 8083 ou 8084 estão abertas com nc, telnet, nmap e Test-NetConnection e separe problemas de firewall e de broker.

Atualizado · 7 min de leitura

Como verificar se uma porta MQTT está aberta (nc, telnet, nmap)

Para verificar se uma porta MQTT está aberta, rode nc -vz -w 5 broker.connectmq.com 1883 no Linux ou macOS, ou Test-NetConnection broker.connectmq.com -Port 1883 no PowerShell. "Succeeded" significa que uma conexão TCP foi aceita; "refused" ou "timed out" dizem onde olhar em seguida. Este guia mostra cada ferramenta, o que a saída significa e como diferenciar um problema de firewall de um problema do broker.

As portas a verificar

PortaTransporteUso típico
1883MQTT sobre TCPMQTT sem criptografia, desenvolvimento, redes confiáveis
8883MQTT sobre TLSDispositivos em produção
8083 / 8080MQTT sobre WebSocketNavegadores em páginas http, ferramentas locais
8084 / 8443 / 443MQTT sobre WebSocket seguroNavegadores, redes restritivas

Os números exatos dependem da configuração do broker — veja portas MQTT explicadas. Nos exemplos usamos broker.connectmq.com, que escuta em 1883, 8883, 8083 e 8084.

nc (netcat) — Linux e macOS

nc -z abre uma conexão TCP e fecha sem enviar dados; -v mostra o resultado e -w 5 desiste após cinco segundos.

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

O texto exato varia entre as variantes do netcat (o macOS mostra connectx to ..., algumas versões mostram open), mas os três resultados são sempre os mesmos. Verifique todas as portas MQTT de uma vez:

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

Não tem nc? O Bash consegue abrir um socket TCP sozinho:

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

telnet

O telnet ainda vem instalado em muitos servidores e funciona no Windows depois de ativar o recurso Cliente Telnet:

telnet
telnet broker.connectmq.com 1883
Output
Trying 203.0.113.10...
Connected to broker.connectmq.com.
Escape character is '^]'.

Connected to significa que a porta está aberta. Pressione Ctrl+] e digite quit para sair. Se em vez disso aparecer telnet: Unable to connect to remote host: Connection refused, nada aceitou a conexão; uma longa pausa seguida de Connection timed out aponta para um filtro no caminho. Não digite nada depois de conectar — MQTT é um protocolo binário, e o broker vai fechar a conexão quando o timeout de conexão expirar sem um pacote CONNECT válido. Isso é normal.

nmap — várias portas e seus estados

O nmap informa um estado claro para cada porta, o que o torna a melhor ferramenta para separar "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
EstadoSignificado
openAlgo aceitou a conexão TCP
closedHost acessível, nada escutando (reset TCP)
filteredSem resposta — um firewall descartou a sonda

-Pn pula o ping inicial, que muitos hosts na nuvem bloqueiam. A coluna SERVICE é só um palpite do nmap pelo número da porta, não prova de que há MQTT ali.

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

Em caso de falha você verá WARNING: TCP connect to (203.0.113.10 : 1883) failed e TcpTestSucceeded : False. Use -InformationLevel Quiet para obter só True / False em scripts. Se um broker local não é acessível de outras máquinas, o Firewall do Windows Defender é uma causa frequente — veja MQTT e o firewall do Windows.

Lendo o resultado: firewall ou broker?

ResultadoO que significaOnde olhar
Open / succeededTCP funciona de ponta a pontaSuba uma camada: TLS e MQTT (abaixo)
Connection refusedHost alcançado, sem listener nessa portaO broker está rodando? Em qual endereço e porta ele escuta?
Timed out / filteredPacotes descartados em algum pontoFirewall do host, security group na nuvem, proxy corporativo, IP errado
Nome não resolvidoProblema de DNS, não de portaConfira o nome do host — veja testar DNS e rede

Depois rode a mesma verificação a partir de uma segunda rede — o hotspot do celular, uma VM na nuvem, a máquina de um colega. Se a porta está aberta de fora, mas não do seu escritório, a sua rede a bloqueia (comum com 1883 e 8883 em redes corporativas e Wi-Fi de visitantes; veja MQTT atrás de um firewall corporativo). Se está fechada de todos os lugares, o problema está do lado do broker.

No host do broker: tem algo escutando?

Se você mesmo roda o broker e vê "refused", verifique o que está escutando:

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

Um listener em 127.0.0.1:1883 aceita apenas conexões locais. O Mosquitto 2.x faz isso por padrão quando nenhum listener está configurado e registra Starting in local only mode. Connections will only be possible from clients running on this machine. Adicione um listener explícito (e autenticação) para aceitar clientes remotos:

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

O gerador de configuração do Mosquitto monta um arquivo completo com listeners TLS e WebSocket. No Docker, confira também se a porta está publicada (-p 1883:1883).

Porta aberta e ainda sem conexão? Teste a próxima camada

Uma porta aberta prova apenas que o TCP funciona. Duas verificações rápidas cobrem as camadas acima:

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

Com -d, um broker saudável mostra uma linha sending CONNECT seguida de received CONNACK (0). Um CONNACK diferente de zero é problema de autenticação ou de protocolo — consulte o código na ferramenta de reason codes. Se o TLS trava na 1883 ou o MQTT falha na 8883, você trocou a porta sem criptografia pela porta TLS. Erros de certificado são tratados em testar uma conexão TLS. Por fim, conecte-se com o cliente MQTT online para confirmar uma ida e volta completa de publish/subscribe.

Confirme com uma ida e volta MQTT real

Verificar uma porta leva segundos e divide o problema em dois: se o TCP falha, é questão de rede, firewall ou listener; se o TCP funciona, olhe para TLS, credenciais e o próprio MQTT. Faça a verificação a partir de mais de uma rede, leia "refused" e "timed out" de formas diferentes e você saberá onde procurar antes de abrir um único arquivo de log.

Perguntas frequentes

Como verifico se a porta 1883 está aberta?

Rode nc -vz -w 5 host 1883 no Linux ou macOS, ou Test-NetConnection host -Port 1883 no PowerShell do Windows. "succeeded" ou TcpTestSucceeded : True significa que uma conexão TCP foi aceita; refused ou timed out significa que não foi.

Qual a diferença entre connection refused e timed out?

Refused significa que o host respondeu, mas nada escuta nessa porta (ou um firewall rejeitou ativamente). Timed out significa nenhuma resposta, o que geralmente indica um firewall ou security group descartando pacotes em silêncio, um IP errado ou um problema de roteamento.

A porta está aberta, mas meu cliente MQTT ainda não conecta. Por quê?

Uma porta aberta prova apenas que o TCP funciona. A falha está então na camada TLS ou MQTT: porta errada para TLS vs TCP puro, problemas de certificado, uma porta WebSocket usada para MQTT puro, credenciais erradas ou um client ID rejeitado. Confira o reason code do CONNACK com mosquitto_pub -d.