Se você gosta do Paralelo GNU tanto quanto eu, tente o seguinte:
parallel nc -vz host ::: 22 80 443 8080
Exemplo de saída:
Connection to foo.example.com 22 port [tcp/ssh] succeeded!
nc: connect to foo.example.com port 80 (tcp) failed: Connection refused
nc: connect to foo.example.com port 443 (tcp) failed: Connection refused
nc: connect to foo.example.com port 8080 (tcp) failed: Connection refused
Esse método também é mais rápido em alguns casos, já que está testando a conexão a portas em paralelo, não em série. Especificamente, seria quando o host remoto (ou firewall intermediário) descartasse seus pacotes para permanecerem invisíveis (em oposição a uma conexão bem-sucedida ou rejeição forçada).
Dica: na maioria das distribuições Linux, você pode instalar parallel
do seu gerenciador de pacotes.
Atualização: Com parallel
, isso gera super bem para cobrir um caso frequentemente necessário de vários hosts x várias portas. O exemplo a seguir usa parallel
para iterar o produto cruzado, para que você não precise gravar nenhum loop aninhado.
parallel nc -vz ::: host1 host2 host3 ::: 22 80 443 8080
Saída:
Connection to host1 22 port [tcp/ssh] succeeded!
Connection to host1 80 port [tcp/http] succeeded!
Connection to host1 443 port [tcp/https] succeeded!
nc: connect to host1 port 8080 (tcp) failed: Connection refused
Connection to host2 22 port [tcp/ssh] succeeded!
nc: connect to host2 port 80 (tcp) failed: Connection refused
nc: connect to host2 port 443 (tcp) failed: Connection refused
nc: connect to host2 port 8080 (tcp) failed: Connection refused
Connection to host3 22 port [tcp/ssh] succeeded!
nc: connect to host3 port 80 (tcp) failed: Connection refused
nc: connect to host3 port 8080 (tcp) failed: Connection refused
nc: connect to host3 port 443 (tcp) failed: Connection refused
Assim como no exemplo anterior, parallel
executa os testes de conexão em paralelo. Observe que o paralelismo padrão é quantos encadeamentos seu sistema possui, mas pode substituir facilmente com a opção -j
para qualquer valor. Você poderia facilmente sair com parallel -j 50 ...
ou até mais, já que testar soquetes não é uma tarefa intensiva da CPU.