Você pode verificar se um processo escuta em uma porta TCP ou UDP com netstat -tuplen.
Para verificar se algumas portas são acessíveis externamente (provavelmente é isso que você deseja), você pode usar um scanner de portas como o Nmap de outro sistema. Executar o Nmap no mesmo host que você deseja verificar é bastante inútil para o seu propósito.
A maneira mais rápida de testar se uma porta TCP está aberta (incluindo qualquer firewall de hardware que você possa ter) é digitar, de um computador remoto (por exemplo, seu desktop):
telnet myserver.com 80
Que tentará abrir uma conexão com a porta 80 nesse servidor. Se você obtiver um tempo limite ou negar, a porta não está aberta :)
OK, em resumo, você tem um servidor no qual pode fazer login. Você quer ver se algo está escutando em alguma porta. Como root, execute:
netstat -nlp
isso mostrará uma lista de processos que escutam nas portas TCP e UDP. Você pode digitalizá-lo (ou grep) para o processo em que está interessado e/ou os números de porta que espera ver.
Se o processo que você espera não estiver lá, você deve iniciar esse processo e verificar o netstat novamente. Se o processo está lá, mas está escutando em uma interface e porta que você não esperava, então há um problema de configuração (por exemplo, ele pode estar escutando, mas apenas na interface de loopback, então você veria 127.0.0.1:3306 e nenhuma outra linha para a porta 3306, no caso da configuração padrão para MySQL).
Se o processo estiver ativo e estiver escutando na porta que você espera, você pode tentar executar um "telnet" para essa porta do seu Macbook em seu escritório/casa, por exemplo,
telnet xxxxxxxxxxxx.co.uk 443
Isso testará se (assumindo portas padrão) que há um servidor web configurado para SSL. Observe que este teste usando telnet só funcionará se o processo estiver escutando em uma porta TCP. Se for uma porta UDP, você também pode tentar com qualquer cliente que você usaria para se conectar a ela. (Vejo que você usou a porta 224. Este é o masqdialer e não tenho idéia do que seja).
Se o serviço estiver lá, mas você não puder acessá-lo externamente, há um firewall bloqueando você. Nesse caso, execute:
iptables -L -n
Isso mostrará todas as regras de firewall definidas em seu sistema. Você pode postar isso, mas, geralmente, se você não estiver permitindo tudo na cadeia INPUT, provavelmente precisará permitir explicitamente o tráfego na porta em questão:
iptables -I INPUT -p tcp --dport 224 -j ACCEPT
Ou algo nesse sentido. Não execute seus comandos de firewall cegamente com base no que algum estranho lhe disse na Internet. Considere o que você está fazendo.
Se o seu firewall na caixa está permitindo o tráfego que você deseja, sua empresa de hospedagem pode estar executando um firewall (por exemplo, eles estão permitindo apenas SSH (22/tcp), HTTP (80/tcp) e HTTPS (443/tcp) e negando todos os outros tráfegos de entrada). Nesse caso, você precisará abrir um ticket de suporte técnico com eles para resolver esse problema, embora eu suponha que possa haver algo no seu cPanel que possa permitir isso.
Se você precisar fazer um script desse tipo de teste, a solução de Serhii Popov (veja o comentário da pergunta) é provavelmente a melhor, pois ncé capaz de procurar na pilha TCP por uma porta aberta³ em vez de tentar uma conexão real.
A forma mais simples é:
nc -z <ip> <port>
O comando retorna true se encontrar o <ip>:<port>combo especificado como sendo aberto (ou seja, um de seus serviços está escutando).
Então agora você pode escrever um script para esperar até que a porta seja aberta:
while ! nc -z <ip> <port>
do
sleep 1
done
Nota 1: tentei a -wopção de linha de comando e isso não parecia fazer nada. De qualquer forma, o comando retorna imediatamente. Eu acho que o -wnão é útil com -z.
Nota 2: para ajudar a depurar, tente com a -vopção de linha de comando.
Nota 3: nc -z ...na verdade cria um socket()e depois tenta bind()e connect(). Se isso funcionar, ele considera a porta aberta.
Você pode verificar se um processo escuta em uma porta TCP ou UDP com
netstat -tuplen
.Para verificar se algumas portas são acessíveis externamente (provavelmente é isso que você deseja), você pode usar um scanner de portas como o Nmap de outro sistema. Executar o Nmap no mesmo host que você deseja verificar é bastante inútil para o seu propósito.
A maneira mais rápida de testar se uma porta TCP está aberta (incluindo qualquer firewall de hardware que você possa ter) é digitar, de um computador remoto (por exemplo, seu desktop):
Que tentará abrir uma conexão com a porta 80 nesse servidor. Se você obtiver um tempo limite ou negar, a porta não está aberta :)
OK, em resumo, você tem um servidor no qual pode fazer login. Você quer ver se algo está escutando em alguma porta. Como root, execute:
isso mostrará uma lista de processos que escutam nas portas TCP e UDP. Você pode digitalizá-lo (ou grep) para o processo em que está interessado e/ou os números de porta que espera ver.
Se o processo que você espera não estiver lá, você deve iniciar esse processo e verificar o netstat novamente. Se o processo está lá, mas está escutando em uma interface e porta que você não esperava, então há um problema de configuração (por exemplo, ele pode estar escutando, mas apenas na interface de loopback, então você veria 127.0.0.1:3306 e nenhuma outra linha para a porta 3306, no caso da configuração padrão para MySQL).
Se o processo estiver ativo e estiver escutando na porta que você espera, você pode tentar executar um "telnet" para essa porta do seu Macbook em seu escritório/casa, por exemplo,
Isso testará se (assumindo portas padrão) que há um servidor web configurado para SSL. Observe que este teste usando telnet só funcionará se o processo estiver escutando em uma porta TCP. Se for uma porta UDP, você também pode tentar com qualquer cliente que você usaria para se conectar a ela. (Vejo que você usou a porta 224. Este é o masqdialer e não tenho idéia do que seja).
Se o serviço estiver lá, mas você não puder acessá-lo externamente, há um firewall bloqueando você. Nesse caso, execute:
Isso mostrará todas as regras de firewall definidas em seu sistema. Você pode postar isso, mas, geralmente, se você não estiver permitindo tudo na cadeia INPUT, provavelmente precisará permitir explicitamente o tráfego na porta em questão:
Ou algo nesse sentido. Não execute seus comandos de firewall cegamente com base no que algum estranho lhe disse na Internet. Considere o que você está fazendo.
Se o seu firewall na caixa está permitindo o tráfego que você deseja, sua empresa de hospedagem pode estar executando um firewall (por exemplo, eles estão permitindo apenas SSH (22/tcp), HTTP (80/tcp) e HTTPS (443/tcp) e negando todos os outros tráfegos de entrada). Nesse caso, você precisará abrir um ticket de suporte técnico com eles para resolver esse problema, embora eu suponha que possa haver algo no seu cPanel que possa permitir isso.
Eu uso a combinação de
netstat
elsof
:Para ver se a porta está sendo usada e o que a está usando.
Se você estiver conectado ao sistema e puder executar um comando como root, poderá verificar a saída do iptables
isso listará as regras de firewall e quais portas são alvos abertos
ACCEPT
e quaisquer portas explicitamente fechadas alvoREJECT
.lsof -i :ssh
listará todos os processos com a porta ssh aberta, tanto as conexões de escuta quanto as ativas.Se você precisar fazer um script desse tipo de teste, a solução de Serhii Popov (veja o comentário da pergunta) é provavelmente a melhor, pois
nc
é capaz de procurar na pilha TCP por uma porta aberta³ em vez de tentar uma conexão real.A forma mais simples é:
O comando retorna true se encontrar o
<ip>:<port>
combo especificado como sendo aberto (ou seja, um de seus serviços está escutando).Então agora você pode escrever um script para esperar até que a porta seja aberta:
Nota 1: tentei a
-w
opção de linha de comando e isso não parecia fazer nada. De qualquer forma, o comando retorna imediatamente. Eu acho que o-w
não é útil com-z
.Nota 2: para ajudar a depurar, tente com a
-v
opção de linha de comando.Nota 3:
nc -z ...
na verdade cria umsocket()
e depois tentabind()
econnect()
. Se isso funcionar, ele considera a porta aberta.