2014-06-16 18:17:25 +0000 2014-06-16 18:17:25 +0000
217
217

É possível pingar um endereço:porto?

Não estou numa rede e tenho a seguinte pergunta relacionada com o comando Linux ping.

Posso apenas pingar um endereço? Por exemplo:

miner@raspberrypi ~ $ ping onofri.org
PING onofri.org (67.222.36.105) 56(84) bytes of data.
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

Ou também posso pingar um endereço:porto* , por exemplo: onofri.org:80*?

Se eu tentar este, não funciona:

miner@raspberrypi ~ $ ping onofri.org:80
ping: unknown host onofri.org:80

É possível pingar algo como endereço:porto*? Se é possível, porque é que o que eu tentei não funciona?

Respostas (11)

311
311
311
2014-06-16 18:19:26 +0000

Os portos são um conceito de UDP e TCP . As mensagens Ping são tecnicamente referidas como ICMP Echo Request e ICMP Echo Reply que fazem parte do ICMP . ICMP, TCP, e UDP são “irmãos”; não são baseados um no outro, mas são três protocolos separados que funcionam em cima do IP.

Portanto, não se pode ping uma porta. O que ** pode*** fazer, é usar um scanner de portas como o nmap.

nmap -p 80 onofri.org

Pode também usar o telnet onofri.org 80, como sugerido numa das outras respostas (dará um erro se a porta estiver fechada ou filtrada).

86
86
86
2014-06-16 18:24:11 +0000

Eu uso Telnet , uma vez que está integrado em muitas plataformas sem downloads adicionais.

Basta usar o comando telnet para se ligar à porta que pretende testar. Se receber a mensagem abaixo, ou uma mensagem do próprio serviço, então a porta está viva.

Minty16 ~ $ telnet localhost 139
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Se souber a sequência de comandos para o serviço a que está a ligar, pode digitar um comando HTTP/FTP GET por exemplo) e observar a resposta e saída no terminal. Isto é muito útil para testar o próprio serviço, pois irá mostrar informação de erro enviada ao cliente, como erros HTTP 500.

Se receber uma mensagem a dizer que a ligação foi recusada, a porta é fechada.

Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
49
49
49
2014-06-16 21:15:05 +0000

Pode utilizar o netcat para se ligar a uma porta específica para ver se obtém uma ligação. A bandeira -v aumentará a verbosidade para mostrar se o porto está aberto ou fechado. A bandeira -z fará com que a netcat desista uma vez que tenha uma ligação. Pode então usar os códigos de saída através de $? para ver se a ligação foi ou não estabelecida.

$ nc -zv localhost 22
localhost [127.0.0.1] 22 (ssh) open
$ echo $?
0
$ nc -zv localhost 23
localhost [127.0.0.1] 23 (telnet) : Connection refused
$ echo $?
1

Adicionalmente, pode usar o mtr com a bandeira -T para tcp e a bandeira -P para especificar uma porta. Isto irá fazer algo semelhante a um traceroute sobre TCP em vez de apenas ICMP. Isto pode ser exagerado, no entanto.

sigh Eu tenho de editar para adicionar este bit, uma vez que não podemos colocar código nos comentários. O Knoppix pode estar a fazer algo diferente com a sua versão do netcat, mas isto é o que recebo do Linux Mint

$ date;nc -z -w 1 www.google.com 8000;date
Fri Jun 20 15:55:26 PDT 2014
Fri Jun 20 15:55:27 PDT 2014
$ date;nc -z -w 4 www.google.com 8000;date
Fri Jun 20 15:55:33 PDT 2014
Fri Jun 20 15:55:37 PDT 2014

$ nc -h
[v1.10-40]
48
48
48
2014-06-17 15:35:04 +0000

Sim, utilize HPing para fazer isso:

$ sudo hping -S -p 80 google.com
HPING google.com (p5p1 77.237.27.37): S set, 40 headers + 0 data bytes
len=46 ip=77.237.27.37 ttl=58 id=25706 sport=80 flags=SA seq=0 win=29200 rtt=7.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25707 sport=80 flags=SA seq=1 win=29200 rtt=7.4 ms
len=46 ip=77.237.27.37 ttl=58 id=25708 sport=80 flags=SA seq=2 win=29200 rtt=8.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25709 sport=80 flags=SA seq=3 win=29200 rtt=7.8 ms
^C
--- google.com hping statistic ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 7.4/7.8/8.5 ms

Note que necessita de privilégios de raiz (ou capacidades SELinux) para criar pacotes IP brutos, tal como o ping (que é muito provavelmente suid no seu sistema).

21
21
21
2015-01-21 08:02:45 +0000

Pode utilizar Paping , um teste de porta TCP multiplataforma, emulando a funcionalidade do ping (port ping)

(ver também Github como code.google.com foi depreciado)

paping -p 80 google.com
19
19
19
2014-06-23 09:57:58 +0000

Também pode utilizar nping (parte de nmap):

$ nping -p 80 localhost

Starting Nping 0.6.00 ( http://nmap.org/nping ) at 2014-06-23 11:57 CEST
SENT (0.0015s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (0.0016s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (1.0027s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (1.0027s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (2.0038s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (2.0039s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (3.0050s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (3.0050s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (4.0061s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (4.0062s) Handshake with localhost:80 (127.0.0.1:80) completed

Max rtt: 0.032ms | Min rtt: 0.008ms | Avg rtt: 0.012ms
TCP connection attempts: 5 | Successful connections: 5 | Failed: 0 (0.00%)
Tx time: 4.00575s | Tx bytes/s: 99.86 | Tx pkts/s: 1.25
Rx time: 4.00575s | Rx bytes/s: 49.93 | Rx pkts/s: 1.25
Nping done: 1 IP address pinged in 4.01 seconds
8
8
8
2015-12-18 22:11:18 +0000

Pode fazer isto na concha com o Python como um revestimento não tão curto:

$ portping() { python <<<"import socket; socket.setdefaulttimeout(1); socket.socket().connect(('$1', $2))" 2> /dev/null && echo OPEN || echo CLOSED; }
$ portping 8.8.8.8 54
CLOSED
$ portping 8.8.8.8 53
OPEN
7
7
7
2017-06-06 13:07:40 +0000

Só para referência, queria partilhar um post de Vivek Gite: https://www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-using-linux-unix/#comment-920398

Ele lista várias formas, algumas das quais já estão postadas aqui. Mas a mais surpreendente para mim foi nada mais do que bash:

(echo >/dev/tcp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/udp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/tcp/www.cyberciti.biz/22) &>/dev/null && echo "Opened 22" || echo "Closed 22"
(echo >/dev/tcp/www.cyberciti.biz/443) &>/dev/null && echo "Opened 443" || echo "Closed 443"

ou uma versão super simples: basta olhar para a saída do seguinte padrão de comando:

echo >/dev/{tcp|udp}/{host}/{port}

Útil quando se trabalha com contentores de doca aleatórios.

3
3
3
2015-06-15 10:48:37 +0000

Adiciono aqui a ferramenta watch:

watch nmap -p22,80 google.com

Every 2,0s: nmap -p22,80 google.com Mon Jun 15 16:46:33 2015

Starting Nmap 6.40 ( http://nmap.org ) at 2015-06-15 16:46 NOVT
Nmap scan report for google.com (127.0.0.1)
Host is up (0.0012s latency).
rDNS record for 127.0.0.1: google.com
PORT STATE SERVICE
22/tcp open ssh
80/tcp closed http

Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds
3
3
3
2016-07-25 18:26:01 +0000

É simples com nmap

exemplos:

#sintaxis
nmap -p [port] hostName
#first is command, after scan ports, type port - port or range ports, and ip or name of website...

## Scan port 80
nmap -p 80 onofri.org

## Scan TCP port 80
nmap -p T:80 onofri.org

## Scan UDP port 53
nmap -p U:53 onofri.org

## Scan two ports ##
nmap -p 80,443 onofri.org

## Scan port ranges ##
nmap -p 80-200 onofri.org

## Combine all options ##
nmap -p U:53,111,137,T:21-25,80,139,8080 onofri.org
nmap -p U:53,111,137,T:21-25,80,139,8080 server1.cyberciti.biz
nmap -v -sU -sT -p U:53,111,137,T:21-25,80,139,8080 onofri.org

## Scan all ports with * wildcard ##
nmap -p "*" 192.168.1.1

## Scan top ports i.e. scan $number most common ports ##
nmap --top-ports 5 onofri.org
nmap --top-ports 10 onofri.org

Para mais informações ver isto:

tipo em linha de comando isto: man nmap http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/ http://www.tecmint.com/nmap-command-examples/

1
1
1
2014-06-19 15:58:08 +0000

Está a tentar testar a comunicação ou obter uma resposta da porta 80 naquele nó? PING vai tentar estabelecer comunicação com um anfitrião específico através do ICMP que nada tem a ver com portas.

Em vez disso, tente http://nmap.org/ para verificar a informação da porta e testar a comunicação:

nmap -v -p 80 onofri.org