Você provavelmente já utilizou o NCAT (nc) para fazer testes de conectividade entre dois servidores de banco de dados, normalmente com portas comuns como a do ssh (22) ou listener do Oracle (1521).

Exemplo:

[grid@fppserver ~]$ nc -vz lab01 1521
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:1521.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

Mas além de testar a conectividade no cenário mais comum onde já tem um serviço escutando na porta em questão, também podemos usar o comando “nc” para testar qual porta que ainda não tenha um serviço ativo nela.

Por exemplo, se você você ainda vai instalar o software do Oracle e quiser verificar se a futura porta do Listener já tem liberação de firewall sem necessariamente ter que instalar e configurar o Grid, ou até mesmo um cenário similar com Golden Gate ou qualquer outro serviço.

Para este cenário, podemos usar o NCAT do lado do servidor de destino para ficar ouvindo em uma porta específica, de modo que possamos utilizá-lo no servidor de origem para realizar o teste de conectividade entre os dois servidores.

1) Exemplo Simples Com Uma Porta Específica

No servidor de destino, subindo o NCAT na porta 1522:

[grid@rac01 ~]$ nc -l -p 1522 &
[1] 9435

Neste momento temos um processo do “nc” em background ouvindo na porta 1522 do servidor “rac01”. Podemos constatar isso com o netstat:

[grid@rac01 ~]$ netstat -tlpn | grep :1522
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:1522            0.0.0.0:*               LISTEN      9435/nc

No servidor de origem, usamos o comando nc normalmente para testar a porta 1522:

[grid@fppserver ~]$ nc -zv rac01 1522
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.31:1522.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

Após o teste, o processo que estava ouvindo na porta 1522 do servidor rac01 é encerrado automaticamente:

[grid@rac01 ~]$
[1]+  Done                    nc -l -p 1522

E se você tentar testar mais uma vez sem subir o NCAT como ouvinte no destino novamente, receberá o erro indicando que não há nenhum serviço respondendo naquela porta:

[grid@fppserver ~]$ nc -zv rac01 1522
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connection refused.

2) Exemplo Com Um Range de Portas

Para o cenário mais complexo onde você pode precisar testar um range de portas, pode ser trabalhoso ter que subir as portas uma por uma no destino, e depois realizar o teste um por um na origem.

Felizmente podemos usar um loop no shell para simplificar essa tarefa. No exemplo abaixo eu irei testar um range de portas 8885-8895 que é usado pelo FPP para realizar a transferência de GoldImages do FPP Server para o FPP Target.

Comando que precisa ser executado no destino:

for (( port=8885; port<=8895; port++ )); do
    nc -l -p $port &
done

Comando que precisa ser executado na origem, assumindo que o hostname de destino é “lab01” (poderia ser um IP também):

for (( port=8885; port<=8895; port++ )); do
    nc -zv lab01 $port
done

Exemplo:

Origem, note que 11 processos foram criados em background, um para cada porta.

[grid@lab01 ~]$ for (( port=8885; port<=8895; port++ )); do
>     nc -l -p $port &
> done
[1] 23835
[2] 23836
[3] 23837
[4] 23838
[5] 23839
[6] 23840
[7] 23841
[8] 23842
[9] 23843
[10] 23844
[11] 23845

Na origem:

[grid@fppserver ~]$ for (( port=8885; port<=8895; port++ )); do
>     nc -zv lab01 $port
> done
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:8885.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:8886.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:8887.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:8888.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:8889.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:8890.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:8891.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:8892.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:8893.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:8894.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.14:8895.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

E se você voltar na sessão do servidor de destino e pressionar ENTER, verá todos os processos sendo encerrados:

[grid@lab01 ~]$
[1]   Done                    nc -l -p $port
[2]   Done                    nc -l -p $port
[3]   Done                    nc -l -p $port
[4]   Done                    nc -l -p $port
[5]   Done                    nc -l -p $port
[6]   Done                    nc -l -p $port
[7]   Done                    nc -l -p $port
[8]   Done                    nc -l -p $port
[9]   Done                    nc -l -p $port
[10]-  Done                    nc -l -p $port
[11]+  Done                    nc -l -p $port

3) Testando Portas com Protocolo UDP

Por padrão o NCAT usa o protocolo TCP, seja como client ou como server. Para realizar um teste usando o protocolo UDP, basta adicionar a opção “-u” nos comandos do NCAT.

Para este exemplo, usarei o serviço do GNS (Grid Name Service), note que nestat mostra que há um processo escutando na porta 53 com protocolo UDP:

[grid@fppserver ~]$ netstat -tlnpu | grep :53
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
udp        0      0 169.254.23.147:53031    0.0.0.0:*                           4021/asm_gen1_+ASM1
udp        0      0 192.168.1.29:53         0.0.0.0:*                           -
udp        0      0 127.0.0.1:53329         0.0.0.0:*                           4053/asm_dbw0_+ASM1
udp        0      0 169.254.23.147:53329    0.0.0.0:*                           4053/asm_dbw0_+ASM1
udp        0      0 10.1.1.25:53437         0.0.0.0:*                           -
udp        0      0 127.0.0.1:53693         0.0.0.0:*                           4024/asm_diag_+ASM1
udp        0      0 169.254.23.147:53693    0.0.0.0:*                           4024/asm_diag_+ASM1
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           2797/mdnsd.bin
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           2797/mdnsd.bin

Se tentarmos executar um teste com NCAT com a mesma sintaxe dos exemplos anteriore, dará serviço negado:

[grid@fppserver ~]$ nc -vz 192.168.1.29 53
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connection refused.

Mas ao incluirmos o parâmetro “-u” de UDP, a conexão é realizada com sucesso:

[grid@fppserver ~]$ nc -u -vz 192.168.1.29 53
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.1.29:53.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 1 bytes received in 2.02 seconds.

Tenha isso em mente quando precisar testar portas de serviços que usam protocolo UDP, como é o caso de DNS, assim como o GNS (Grid Name Service).

4) Transferindo Um Arquivo Com NCAT

Também é possível transferir um arquivo usando o NCAT, o que pode ser útil para investigação e testar se um serviço deve ser capaz de realizar transferência de arquivos por uma porta específica. Para este exemplo, irei copiar o arquivo “gi_home_19300.zip” do servidor “fppserver” para o “lab01” pela porta 8895.

Observe o tamanho do arquivo e o hash obtido com md5sum:

[grid@fppserver medias]$ md5sum gi_home_19300.zip
b7c4c66f801f92d14faa0d791ccda721  gi_home_19300.zip
[grid@fppserver medias]$
[grid@fppserver medias]$ du -sh gi_home_19300.zip
2.7G    gi_home_19300.zip

No destino, iniciando nc para ouvir na porta 8895 e gravar o resultado que ele receber no arquivo “/u01/medias/gi_home_19300.zip” (poderia ser qualquer nome e destino). Note que este arquivo ainda não existe no servidor de destino e será criado pelo NCAT, conforme ele receber a entrada do servidor de origem.

[grid@lab01 ~]$ nc -l 8895 > /u01/medias/gi_home_19300.zip

Na origem, executando um “cat” no arquivo zip que é um binário do Grid, e passando a saída para o comando “nc” transferir o conteúdo para o servidor “lab01”, na porta 8895:

[grid@fppserver medias]$ cat gi_home_19300.zip | nc lab01 8895

Este comando não mostrará nenhum progresso da cópia e você precisa aguardar o controle da sessão voltar para o prompt.

Agora se verificar novamente no destino, verá que o processo do NCAT que estava ativo na porta 8895 finalizou, e o arquivo .zip foi criado:

[grid@lab01 ~]$ du -sh /u01/medias/gi_home_19300.zip
2.7G    /u01/medias/gi_home_19300.zip
[grid@lab01 ~]$
[grid@lab01 ~]$ md5sum /u01/medias/gi_home_19300.zip
b7c4c66f801f92d14faa0d791ccda721  /u01/medias/gi_home_19300.zip

Leave a Reply

Discover more from Blog do Dibiei

Subscribe now to keep reading and get access to the full archive.

Continue reading