Você pode usar Paping , um teste de porta TCP entre plataformas, emulando a funcionalidade de ping (porta ping)
(veja também O Github como code.google.com foi depreciado)
paping -p 80 google.com
Não estou em rede, e tenho a seguinte pergunta relacionada ao comando ping do Linux.
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 eu também posso pingar um endereço: port , 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 address: port ? Se é possível, por que o que eu tentei não funciona?
Portas são um conceito de UDP e TCP . As mensagens de ping são tecnicamente referidas como solicitação de eco do ICMP e ICMP Echo Reply que fazem parte de ICMP . ICMP, TCP e UDP são "irmãos"; eles não são baseados um no outro, mas são três protocolos separados que são executados em cima do IP.
Portanto, você não pode ping
a port. O que você pode fazer é usar um scanner de porta como nmap
.
nmap -p 80 onofri.org
Você também pode usar telnet onofri.org 80
, como sugerido em uma das outras respostas (Isso dará um erro se a porta for fechada ou filtrada).
Eu uso o Telnet , pois ele é incorporado em muitas plataformas sem downloads adicionais.
Basta usar o comando telnet para se conectar à porta que você deseja testar. Se você receber a mensagem abaixo ou uma mensagem do próprio serviço, a porta estará ativa.
Minty16 ~ $ telnet localhost 139
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Se você conhece a sequência de comandos para o serviço ao qual está se conectando, você pode digitar um comando ( HTTP / FTP GET por exemplo) e observe a resposta e a saída no terminal. Isso é muito útil para testar o serviço em si, já que ele mostrará as informações de erro enviadas ao cliente, como erros HTTP 500.
Se você receber uma mensagem informando que a conexão foi recusada, a porta será fechada.
Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Você pode usar o netcat para se conectar a uma porta específica para ver se você obtém uma conexão. O sinalizador -v aumentará o detalhamento para mostrar se a porta está aberta ou fechada. O sinalizador -z fará com que o netcat seja encerrado assim que tiver uma conexão. Você pode então usar os códigos de saída através de $? para ver se a conexão foi estabelecida ou não.
$ 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
Além disso, você pode usar mtr com o sinalizador -T para tcp e o sinalizador -P para especificar uma porta. Isso fará algo semelhante a um traceroute sobre TCP, em vez de apenas ICMP. Isso pode ser um exagero, no entanto.
suspiro Eu tenho que editar para adicionar este bit, já que não podemos colocar código nos comentários. O Knoppix pode estar fazendo algo diferente com sua versão do netcat, mas é isso que eu ganho com o 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]
Sim, use 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 ele precisa de privilégios de root (ou recursos do SELinux) para criar pacotes IP brutos, assim como o ping (que é mais provável que seja suid no seu sistema).
Você também pode usar 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
Você pode fazer isso em šhell com o Python como um não muito curto:
$ portping() { python <<<"import socket; socket.setdefaulttimeout(1); socket.socket().connect(('$1', $2))" 2> /dev/null && echo OPEN || echo CLOSET; }
$ portping 8.8.8.8 54
CLOSET
$ portping 8.8.8.8 53
OPEN
Eu adiciono a ferramenta watch
aqui:
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
Apenas para referência, queria compartilhar um post do Vivek Gite: link
Ele lista várias maneiras, algumas das quais já estão postadas aqui. Mas o mais surpreendente para mim foi nada mais, mas 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 ao trabalhar com contêineres aleatórios do Docker.
Você está tentando testar a comunicação ou obter uma resposta da porta 80 nesse nó? PING
tentará estabelecer comunicação com um host específico através do ICMP que não tem nada a ver com portas.
Em vez disso, tente o link para verificar as informações da porta e testar a comunicação:
nmap -v -p 80 onofri.org
É 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, veja isto:
digite na linha de comando isto: man nmap
Tags networking ping linux