Quais são as alternativas para verificar as portas abertas, além do telnet?

22

Podemos usar o seguinte para testar a porta VIA do telnet; No exemplo a seguir, testamos a porta 6667:

[root@kafka03 ~]# telnet kafka02 6667
Trying 103.64.35.86...
Connected to kafka02.
Escape character is '^]'.
^CConnection closed by foreign host

Como em algumas máquinas não podemos usar o telnet (por razões internas), quais são as alternativas para checagem de portas, como o telnet?

    
por yael 04.11.2018 / 11:25

6 respostas

17

Se estiver usando o Bash Shell, você poderá usar o recurso para verificar se uma porta está aberta ou fechada:

(timeout 1 bash -c '</dev/tcp/127.0.0.1/17500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT OPEN

(timeout 1 bash -c '</dev/tcp/127.0.0.1/7500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT CLOSED

Observe que, se o servidor não responder após 1 segundo, o tempo limite será atingido, os comandos entre ' serão interrompidos e, portanto, nada será impresso.

    
por 04.11.2018 / 19:27
27

netcat é uma opção.

nc -zv kafka02 6667
  • -z = configura o nc para simplesmente procurar daemons de escuta, sem realmente enviar nenhum dado para eles
  • -v = ativa o modo detalhado
por 04.11.2018 / 11:28
23

O padrão ouro é, sem dúvida, nmap ( nmap.org ), mas normalmente requer raiz para “melhores resultados”. No entanto, binários independentes estão disponíveis e é possível executá-lo como um usuário não privilegiado, apenas com recursos degradados. Por exemplo, em vez de uma varredura furtiva syn ( -sS ), ela retorna a uma varredura de conexão TCP padrão ( -sT ). Isso é funcionalmente equivalente ao netcat, mas com os bons recursos multi-host e acelerados que ele possui.

Um exemplo:

not-root$ nmap -sT google.com
Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-04 21:01 GMT
Nmap scan report for google.com (172.217.23.14)
Host is up (0.12s latency).
rDNS record for 172.217.23.14: lhr35s01-in-f14.1e100.net
Not shown: 998 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https
    
por 04.11.2018 / 22:04
4

Se o Perl for uma opção, você pode usar o módulo IO::Socket para testar uma conexão com um determinado host e porto; o script abaixo codifica TCP como o protocolo (que é o que o telnet usaria):

#!/usr/bin/perl -w

# tries to connect to the given IP and port (tcp)

use strict;
use IO::Socket;

my $desthost = shift or die "Usage: $0 host port\n";
my $destport = shift or die "Usage: $0 host port\n";

gethostbyname($desthost) || die "Invalid host given\n";

my $handle = IO::Socket::INET->new(
        PeerAddr => $desthost,
        PeerPort => $destport,
        Proto    => 'tcp')
    or die "can't connect to $desthost:$destport: $!\n";
close $handle;
print "Success!\n"

Exemplo de saída de uma porta fechada:

$ ./above-script kafka02 6667
can't connect to kafka02:6667: Connection refused

Exemplo de saída de uma porta aberta:

$ ./above-script kafka02 4200
Success!
    
por 06.11.2018 / 14:32
0

O arquivo do dispositivo / dev / tcp e o / dev / udp podem ser usados em vez do telnet. Exemplo: echo 0 > /dev/tcp/103.64.35.86/6667. Em seguida, verifique o status de saída usando #echo $? . Se o status de saída for 0, a porta estará aberta. Se o status de saída for diferente de zero, a porta será fechada. Para verificar os pacotes do udp, use o echo 0 > /dev/udp/103.64.35.86/6667.

    
por 06.11.2018 / 21:47
0
ss -lt 

este é outro comando que você pode usar.

    
por 27.11.2018 / 10:31