Questão É possível fazer ping em um endereço: port?


Eu não estou em rede, e tenho a seguinte questão relacionada ao Linux ping comando.

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 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 endereço: port? Se é possível, por que o que eu tentei não funciona?


193


origem


O que você está tentando realizar? Verificar a operação correta do serviço requer que você realmente consulte o serviço e avalie a resposta. Um servidor da Web poderia, por exemplo, aceitar sua conexão, mas retornar um erro devido a um erro de configuração. - Daniel B
Isso faz parte do que eu gosto sobre o Telnet. você pode se conectar a um servidor da Web e digitar GET /index.html HTTP\1.1 e veja a resposta 200 (ou código de erro) junto com a marcação resultante. - Frank Thomas
@FrankThomas HTTP\1.1? Mesmo? - glglgl
@Navin Talvez HTTP/1.1... - glglgl
@glglgl; o que? você nunca coloca um hack onde uma barra deve ir? mas você está correto, deve ser um golpe. - Frank Thomas


Respostas:


Você pode usar Paping, um teste de porta TCP entre plataformas, emulando a funcionalidade de ping (ping de porta)

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

paping -p 80 google.com

18



Alguma explicação do que este programa faz seria útil. - David Schwartz
para qualquer um que encontre essa resposta, como eu fiz, apenas para descobrir que paping não está em nenhum repositório e é um código antigo que nem sequer compila em ARM - role para baixo até a resposta 'hping'. É um perfeito drop-in para ping quando você precisa testar uma porta e é facilmente acessível em vários repositórios (ou seja, Ubuntu, Arch), incluindo o ARM. - Mark


Portos são um conceito de UDP e TCP. Ping mensagens são tecnicamente referidas como Pedido de eco do ICMP e Resposta do eco de ICMP que fazem parte ICMP. ICMP, TCP e UDP são "irmãos"; eles não são baseados uns nos outros, mas são três protocolos separados que são executados em cima do IP.

Portanto você não pode ping uma porta. O que você posso 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).


297



+1 você entende direito. O ICMP é construído sobre IP, que tem um conceito de endereços IP, mas não de portas. TCP e UDP também estão no topo do IP, e são esses protocolos que adicionam "portas". ICMP, TCP e UDP estão todos no mesmo "nível" em termos do protocolo pelo qual são transportados. - Jason C
+1. Muitas, muitas pessoas pensam que, se não conseguirem pingar alguma coisa, não poderão se conectar a ela ... mas, como você diz, o ICMP é diferente de TCP e UDP: se você pretende servir, digamos, uma página da Web no TCP 80, do que você só precisa abrir o TCP 80 no firewall, nada mais (por isso Ping para o mesmo IP poderia (... deveria!) ser bloqueado, por exemplo) - Olivier Dulac
Apenas para manter as informações precisas, o ICMP não é um protocolo de camada de transporte como o TCP ou o UDP. Como vários protocolos, ele não se encaixa totalmente nos modelos conceituais de rede, mas geralmente é considerado um protocolo de camada de rede / internetwork como é o IP. Por vezes também foi referido como um protocolo L3.5. - YLearn
@BenjiWiebe, concordou, mas novamente, para precisão, a declaração deve ser feita e é por isso que a adicionei. Tudo o que é dito até agora é que ICMP, TCP e UDP estão relacionados. O maior comentário votado chega a dizer que eles estão todos no mesmo "nível". Embora isso não seja uma diferença para o usuário comum, há muitos usuários não médios que visitam esse site. - YLearn
@ OlivierDulac Eu não sei se você devemos bloqueá-lo. A maioria dos webservers que conheço deixa em aberto. O ICMP faz a internet girar. Por que você quer que as pessoas pensem que não podem alcançá-lo se puderem? - Cruncher


eu uso Telnet, já que é construído 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ê souber a sequência de comandos para o serviço ao qual está se conectando, poderá 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, pois 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

77



Além disso, se a tela ficar completamente preta, é um sinal de que você está conectado também. - Tensigh
Excelente sugestão. Eu costumava usar isso para testar se um servidor web estava ativo quando um navegador da web não era uma opção fácil. - Brandon
@Brandon goste quando sshing em dev máquinas ^. ^ - Cruncher
As ferramentas de desenvolvedor nos navegadores são muito mais fáceis, porque elas ainda enviam todos os cabeçalhos de solicitação HTTP apropriados, mas você pode inspecionar a resposta HTTP completa. Então, novamente, se você quiser adaptar o pedido também, então telnet é o caminho a percorrer. - Lightness Races in Orbit
Acho que todas as respostas aqui perdem a informação mais crucial. Tecnicamente, não seria possível "pingar" uma porta da seguinte maneira? Você pode estabelecer uma conexão TCP / UDP e contar quantos milissegundos foram necessários para estabelecer essa conexão. - David


Sim, use HPing 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).


40



Eu gostaria que esta fosse a "resposta aceita". O hping era facilmente encontrado em múltiplos repositórios, ao contrário do paping, que é um código antigo que não é compilado no ARM. Além disso, ao contrário do NMAP, o haping retorna um código de status que é facilmente testável a partir de um script de shell, portanto é um substituto perfeito para onde você utilizaria o ping. Obrigado por esta resposta, uma pena que eu não rolei o suficiente para vê-lo e tive que encontrá-lo em outro site. - Mark


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 o código nos comentários. O Knoppix pode estar fazendo algo diferente com sua versão do netcat, mas é isso que eu obtenho 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]

39



problema é se você tentar nc -z www.google.com 8000  pode demorar muito tempo - mais 5 segundos. Se eu fizer -w 1 então demora 5 segundos. Se eu fizer -w 3 então demora 3 vezes mais tempo .. 15 flashes do cursor, 15 segundos. -w 1 destina-se a ser um segundo, mas testado em cygwin. 5 segundos. É super rápido quando há um servidor na porta, mas um pouco lento quando não há. - barlop
não amaldiçoar novas linhas nos comentários ... Isso parece ser um bug do cygwin. Teste com o linux Mint mostra um atraso de quantos segundos especificados. correu isto para testar: date; nc-zw5 www.google.com 8000; date - Falsenames
Eu também votei no @BenjiWiebe com os pedidos do nmap. O nc é mais fácil de colocar em um script, mas é MUITO mais fácil usar o nmap visualmente. - Falsenames
Tentando isso em knoppix. nc -zv -w 1 www.google.com Como você faz isso apenas tentar uma vez? Quando eu tento sim o -w 1 funciona, mas a cada segundo ele tenta novamente até que eu faça Ctrl-C. - barlop
Não tenho certeza do que a versão do Knoppix do 'nc -zv -w 1 www.google.com 80' está fazendo. Isso funciona bem no meu sistema, consultando uma vez e soltando exatamente como -z deve fazer. Além disso, sem o número da porta especificado, o meu falha ao informar que não há porta especificada. - Falsenames


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

15



nping --tcp -p 80 localhost - K-Gun


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

5



Você não cola isso no ganso bobo de python. Cole-o na festança. - AXE-Labs
sim eu sou um idiota, comentário removido, obrigado funcionou perfeitamente. - rob
CLOSET, loooool - srghma


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 tenha nada a ver com portas.

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

nmap -v -p 80 onofri.org

2



Não tenho certeza de qual versão do nmap você está usando. No meu sistema, ele requer que -v e -p sejam separados como 'nmap -v -p 80 onofri.org'. Isto é porque -v e -vv significam coisas diferentes, tomando mais v's como argumento. - Falsenames


Eu adiciono watch ferramenta 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

2





É 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

http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/ http://www.tecmint.com/nmap-command-examples/


2





Apenas para referência, queria compartilhar um post do 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 maneiras, algumas das quais já estão postadas aqui. Mas o mais surpreendente para mim foi nada mais 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: apenas olhando 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.


2