O seu servidor Linux está em execução, e agora você quer verificar se uma porta específica está aberta para que você possa acessá-la remotamente. Verificar as portas abertas é uma tarefa bastante comum para administradores de sistema, e existem algumas maneiras diferentes de fazê-lo no Linux.
Neste artigo, você aprenderá várias maneiras de verificar se uma porta está aberta no Linux para que você possa escolher as que funcionam melhor para você. Pronto? Continue lendo!
Pré-requisitos
Este tutorial será uma demonstração prática. Se você deseja acompanhar, certifique-se de ter o seguinte.
- A Linux computer. This guide uses Ubuntu 20.04, but any recent Linux distribution should work.
- Acesso a um terminal. Se você usa um ambiente de desktop gráfico, procure por um programa emulador de terminal no menu de aplicativos. Ou, se você fez login em um servidor remoto via SSH,
- A user account with
sudo
privileges. For simplicity, this tutorial uses the root user.
Verificar Se uma Porta Está Aberta no Linux Usando o netstat
O primeiro método para verificar se uma porta está aberta no Linux é executando o comando netstat
. Este comando exibe conexões de rede, tabelas de roteamento e muitas estatísticas de interface de rede.
O comando netstat
faz parte do pacote net-tools
, e este pacote pode não vir por padrão com sua distribuição Linux. No Ubuntu, instale o netstat
executando os seguintes comandos no terminal.
Suponha que você tenha um servidor web NGINX em execução e queira verificar se a porta 80
está aberta. Você pode fazer isso executando o seguinte comando. Substitua 80
pelo número da porta que deseja verificar.
As bandeiras -tulpn
instruem o netstat
a exibir todas as portas em escuta. O primeiro comando grep
encontra e filtra a linha contendo a palavra LISTEN
no resultado. O segundo comando grep
filtra os resultados para exibir apenas aqueles itens que correspondem a :80
.
Para saber mais sobre as bandeiras do netstat, execute o comando netstat –help.
Se a porta estiver aberta, você verá a seguinte saída. Como pode ser visto, a saída mostra que a porta 80 está aberta no sistema. tcp é o tipo de protocolo, e :::80
indica que é uma porta TCPv6. 0.0.0.0:80
significa que a porta está aberta para todos os endereços IPv4. 80
é a porta padrão HTTP que serve o acesso ao site.

Verificando se uma Porta Está Aberta Usando ss
O comando ss
é mais uma utilidade de linha de comando para verificar portas abertas. Este comando exibe estatísticas do socket, que você pode usar para confirmar se uma porta está aberta ou não. O comando ss
mostra mais informações sobre portas abertas do que outras ferramentas.
Assim como o comando netstat
, a opção -t
instrui o ss
a exibir apenas sockets TCP, -u
para exibir apenas sockets UDP, e -l
para mostrar apenas sockets de escuta. A opção -p
indica o nome do processo ou PID que está utilizando a porta.
Se a porta estiver aberta, você verá a seguinte saída. Como mostrado, a saída contém o nome do processo e o PID para cada porta de escuta. Neste caso, a porta 80 está aberta, e o servidor web NGINX está a utilizá-la.

Verificando Se uma Porta Está Aberta Usando o lsof
O comando lsof
é outra ferramenta útil para verificar portas abertas. O nome lsof
significa listar arquivos abertos, que exibe informações sobre arquivos abertos no sistema. Essas informações incluem descritores de arquivos, IDs de processo, IDs de usuário, etc.
Como listar arquivos abertos ajuda a determinar se uma porta está aberta? Você provavelmente já ouviu a frase “tudo no Linux é um arquivo” — e essa frase significa o que diz.
Por exemplo, se você quiser verificar se a porta 22 está aberta e se seus usuários podem fazer SSH no seu servidor, execute o comando abaixo para listar arquivos abertos com conexões ativas na porta 22.
A bandeira -i
instrui o lsof
a exibir todos os sockets de Internet abertos. A bandeira -P
mostra os números das portas em vez dos nomes dos serviços. E a bandeira -n
suprime as pesquisas de DNS e de nomes de serviço, então você verá os endereços IP em vez dos nomes dos hosts remotos.
Se a porta estiver aberta, você verá a seguinte saída. Como pode ver, a saída contém informações sobre:
1027 é o ID do processo do serviço sshd.
root é o ID do usuário que está usando a porta.
3u e 4u são os descritores de arquivo para IPv4 e IPv6, respectivamente.
31035 e 31037 são as portas de rede para IPv4 e IPv6, respectivamente.
:22 indica que a porta 22 está aberta para todos os endereços IPv4 e IPv6.
- (LISTEN) mostra que a porta está ouvindo conexões de entrada.
0t0 é o estado do socket, o que significa que o socket está no estado LISTEN.

Verificando Se uma Porta Está Aberta Usando o nmap
Até agora, você viu como verificar se uma porta está aberta no Linux usando a linha de comando. Mas e se você quiser verificar se uma porta está aberta em uma máquina remota? Nesse caso, você pode usar a ferramenta nmap
.
Mas antes de executar o nmap
, esteja ciente de que essa ferramenta pode não fazer parte dos pacotes padrão em sua distribuição Linux. Nesse caso, você deve primeiro instalar o nmap
executando o comando abaixo.
Agora, execute o seguinte comando para verificar se uma porta está aberta em uma máquina remota. Este comando testa se a porta 22
está aberta em 159.89.176.25
para que seu usuário possa fazer SSH no seu servidor. Substitua o endereço IP conforme necessário com o seu.
Como você pode ver, a saída contém informações sobre:
- O horário de início da varredura de portas (2022-06-30 16:58 UTC).
- O endereço IP da máquina remota (159.89.176.25).
- O estado da porta (aberta).
- O serviço que está usando a porta (ssh).
- O estado do host (ativo).

O resultado confirma que os usuários podem fazer SSH no computador usando o endereço IP e a porta.
A captura de tela abaixo mostra uma conexão SSH bem-sucedida com o servidor, comprovando que a porta 22 está aberta.

Testando se uma Porta Está Aberta a partir de um Script de Shell
A automação é sempre uma boa ideia. Verificar portas abertas executando um script de shell é uma excelente maneira de testar várias portas. Você pode usar quaisquer métodos anteriores para verificar se uma porta está aberta. Mas, para este exemplo, você estará escrevendo um script de shell básico que executa o comando Netcat nc
.
1. Crie um arquivo chamado check_port.sh no seu diretório pessoal usando o editor de texto de sua preferência. Neste exemplo, usaremos o nano.
2. Copie o código de exemplo abaixo para o seu editor. Substitua 80 pelo número da porta que você deseja verificar.
A condição if verifica se a porta 80 está aberta usando o comando nc. O 2>&1 e >/dev/null redirecionam os erros e mensagens de saída para /dev/null, respectivamente. O /dev/null é um arquivo especial que descarta tudo o que recebe.
Se a porta estiver aberta, o script check_port.sh imprimirá “Online” no console. Caso contrário, o script imprimirá “Offline”.
O arquivo do script deve se parecer com a captura de tela abaixo. Salve o script e saia do editor.

3. Execute o script shell para começar a verificar as portas abertas especificadas no script.
Você verá uma das mensagens a seguir, dependendo se a porta está aberta. Neste caso, a porta está aberta, como confirma a mensagem Online
.

Você pode usar este script shell para verificar se uma porta está aberta em um intervalo ou como um trabalho agendado. A criação de scripts é especialmente útil quando você precisa verificar vários servidores. Você só precisa copiar este script check_port.sh para todos os servidores que deseja verificar e executá-lo usando ferramentas de CI/CD como Jenkins ou Ansible.
Testando Se uma Porta Está Aberta Usando o PowerShell
O PowerShell possui um cmdlet integrado para testar conexões de rede chamado Test-NetConnection
— mas esse cmdlet está disponível apenas em sistemas Windows. Não se preocupe; você ainda pode usar o PowerShell no Linux para verificar portas abertas e conexões usando a classe TcpClient.
Se o seu computador Linux ainda não tiver o PowerShell, instale-o seguindo as instruções nesta documentação da Microsoft: Instalar o PowerShell no Linux.
1. Inicie o PowerShell executando o comando abaixo.

2. Em seguida, crie um arquivo chamado Test-Port.ps1 usando o seu editor de texto. Este exemplo utiliza o nano.
3. Depois, copie o código abaixo para o seu editor. Salve o arquivo e saia do editor em seguida.
Nota: Este código é um excerto da Ferramenta de Teste de Porta All-in-One PowerShell.
4. Após salvar o script Test-Port.ps1, execute o comando abaixo para testar as portas 22, 80, 443 e 53.
O parâmetro -NomeDoComputador aceita a lista de nomes de host, FQDN ou endereços IP da(s) máquina(s) de destino.
O parâmetro -Porta aceita um array de um ou mais números de porta para teste.
Como você pode ver abaixo, o resultado mostra que as portas 22 e 80 estão abertas (True), enquanto a porta 443 não está (False).

Para executar o mesmo script contra vários destinos e portas, edite o código abaixo para adicionar todos os computadores de destino no parâmetro NomeDoComputador e os números de porta no parâmetro Porta.

Conclusão
Neste artigo, você aprendeu como verificar se uma porta está aberta ou não no Linux. Você também aprendeu a verificar se uma porta está aberta a partir de um script de shell e do PowerShell. Agora, você pode usar qualquer um desses métodos para verificar se uma porta está aberta em sua máquina ou em qualquer máquina remota.
Não pare por aqui, porém. Confira outros artigos de resolução de problemas para continuar a aprimorar suas habilidades de administrador de sistema!
Source:
https://adamtheautomator.com/check-if-a-port-is-open-in-linux/