È possibile eseguire il ping di un indirizzo: porta?


210

Non mi piacciono le reti e ho la seguente domanda relativa al comando ping Linux .

Posso solo eseguire il ping di un indirizzo? Per esempio:

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

Oppure posso anche eseguire il ping di un indirizzo: port , ad esempio: onofri.org:80 ?

Se provo questo non funziona:

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

È possibile eseguire il ping qualcosa come address: port ? Se è possibile, perché ciò che ho provato non funziona?


8
Cosa stai cercando di realizzare? Per verificare il corretto funzionamento del servizio è necessario interrogare effettivamente il servizio e valutare la risposta. Un server Web, ad esempio, potrebbe accettare la connessione, ma restituire un errore a causa di un'errata configurazione.
Daniel B,

5
Questo è parte di ciò che mi piace di Telnet. è possibile connettersi a un server Web, digitare GET /index.html HTTP\1.1e visualizzare la risposta 200 (o il codice di errore) insieme al markup risultante.
Frank Thomas,

7
@FrankThomas HTTP\1.1? Veramente?
glglgl,

5
@Navin Forse HTTP/1.1...
glglgl il

3
@glglgl; che cosa? non hai mai messo un hack dove dovrebbe andare una barra? ma hai ragione, dovrebbe essere una barra.
Frank Thomas,

Risposte:


21

Puoi usare Paping , un test della porta TCP multipiattaforma, che emula la funzionalità di ping (port ping)

(vedi anche Github come code.google.com è stato ammortizzato)

paping -p 80 google.com

8
Qualche spiegazione di ciò che fa questo programma sarebbe utile.
David Schwartz,

16
per chiunque trovi questa risposta, come ho fatto io, solo per trovare paping non è in alcun repository ed è un codice antico che non verrà nemmeno compilato su ARM - scorrere più in basso fino alla risposta 'hping'. È un perfetto drop-in per il ping quando è necessario testare una porta ed è facilmente accessibile in vari repository (es. Ubuntu, Arch) incluso ARM.
Marco

Come posso installare paping? Ho visitato il repository ma non ci sono versioni. Ah, non importa ... il codice di Google non era accessibile per me al momento.
Shayan

307

Le porte sono un concetto di UDP e TCP . I messaggi ping sono tecnicamente definiti ICMP Echo Request e ICMP Echo Reply che fanno parte di ICMP . ICMP, TCP e UDP sono "fratelli"; non sono basati l'uno sull'altro, ma sono tre protocolli separati eseguiti su IP.

Pertanto non è possibile pinguna porta. Quello che puoi fare è usare un port scanner come nmap.

nmap -p 80 onofri.org

Puoi anche usare telnet onofri.org 80, come suggerito in una delle altre risposte (darà un errore se la porta è chiusa o filtrata).


22
+1 lo capisci bene. ICMP è basato sull'IP, che ha un concetto di indirizzi IP ma non di porte. TCP e UDP sono anche al di sopra dell'IP, e sono quei protocolli che aggiungono "porte". ICMP, TCP e UDP sono tutti allo stesso "livello" in termini di protocollo da cui sono gestiti.
Jason C,

14
+1. Molte, molte persone pensano che se non riescono a eseguire il ping di qualcosa che non riescono a connettersi ad esso ... ma come dici tu, ICMP è diverso da TCP e UDP: se intendi servire, diciamo, una pagina web su TCP 80, di quello che devi solo aprire TCP 80 sul firewall, nient'altro (quindi Ping allo stesso IP potrebbe (... dovrebbe!) essere bloccato, per esempio)
Olivier Dulac,

6
Solo per mantenere accurate le informazioni, ICMP non è un protocollo di livello di trasporto come TCP o UDP. Come una serie di protocolli, non rientra interamente nei modelli concettuali di rete, ma è generalmente considerato un protocollo di livello rete / internetwork come IP. A volte è stato anche definito protocollo L3.5.
YLearn

2
@BenjiWiebe, concordato, ma ancora una volta, per precisione, dovrebbe essere fatta la dichiarazione, motivo per cui l'ho aggiunta. Tutto ciò che viene detto finora è che ICMP, TCP e UDP sono correlati. Il commento più votato arriva persino a dire che sono tutti sullo stesso "livello". Sebbene ciò non faccia alcuna differenza per l'utente medio, ci sono molti utenti non medi che visitano questo sito.
YLearn,

4
@OlivierDulac Non so se dovresti bloccarlo. La maggior parte dei server web che conosco lo lasciano aperto. ICMP fa girare Internet. Perché vorresti che le persone pensassero di non poterti raggiungere se possono?
Cruncher,

85

Uso Telnet , poiché è integrato in molte piattaforme senza download aggiuntivi.

Basta usare il comando telnet per connettersi alla porta che si desidera testare. Se ricevi il messaggio seguente o un messaggio dal servizio stesso, la porta è attiva.

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

Se si conosce la sequenza dei comandi per il servizio a cui ci si sta connettendo, è possibile digitare un comando ( HTTP / FTP GET per esempio) e osservare la risposta e l'output nel terminale. Questo è molto utile per testare il servizio stesso, in quanto mostrerà le informazioni sugli errori inviate al client, come gli errori HTTP 500.

Se viene visualizzato un messaggio di rifiuto della connessione, la porta viene chiusa.

Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

8
Anche se lo schermo diventa completamente nero è anche un segno che sei connesso.
Tensigh,

Suggerimento eccellente. Lo usavo per verificare se un server Web era attivo quando un browser Web non era un'opzione facile.
Brandon,

@ Abbandonati come quando immergi nelle macchine degli sviluppatori ^. ^
Cruncher,

Gli strumenti per gli sviluppatori nei browser sono molto più semplici, perché invieranno comunque tutte le intestazioni delle richieste HTTP corrette ma è possibile controllare la risposta HTTP completa. Quindi di nuovo se si desidera personalizzare anche la richiesta, Telnet è la strada da percorrere.
Corse di leggerezza in orbita,

Penso che a tutte le risposte qui manchi l'informazione più cruciale. Tecnicamente, non sarebbe possibile "pingare" una porta come segue? È possibile stabilire una connessione TCP / UDP e contare quanti millisecondi necessari per stabilire tale connessione.
David,

46

Sì, usa HPing per farlo:

$ 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

Si noti che ha bisogno dei privilegi di root (o delle funzionalità di SELinux) per creare pacchetti IP grezzi, proprio come il ping (che è probabilmente usato sul proprio sistema).


2
Vorrei che questa fosse la "risposta accettata". hping era facilmente reperibile in più repository, a differenza della paping che è un antico codice crufty che non si compila su ARM. Inoltre, a differenza di NMAP, l'haping restituisce un codice di stato facilmente verificabile da uno script di shell, quindi è un sostituto perfetto per dove altrimenti si userebbe il ping. Grazie per questa risposta, è un peccato che non sia riuscito a scorrere abbastanza in basso per vederlo e invece ho dovuto trovarlo su un altro sito web.
Marco

Non riesco a installare hping in Ubuntu .. Pacchetto non trovato .. Ma ho trovato. hping3È lo stesso di hping3? @ d33tah
Shayan

Ok ho provato hping3e esegue il ping di tutte le porte .. Non importa chiuso o aperto .. Come posso sapere se una porta è chiusa o aperta?
Shayan

45

È possibile utilizzare netcat per connettersi a una porta specifica per vedere se si ottiene una connessione. Il flag -v aumenterà la verbosità per mostrare se la porta è aperta o chiusa. Il flag -z causerà la chiusura di netcat una volta che ha una connessione. È quindi possibile utilizzare i codici di uscita tramite $? per vedere se la connessione è stata stabilita o meno.

$ 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

Inoltre, è possibile utilizzare mtr con il flag -T per tcp e il flag -P per specificare una porta. Questo farà qualcosa di simile a un traceroute su TCP anziché solo ICMP. Questo può essere eccessivo, tuttavia.

sospiro Devo modificare per aggiungere questo bit, dato che non possiamo inserire codice nei commenti. Knoppix potrebbe fare qualcosa di diverso con la sua versione di netcat, ma questo è ciò che ottengo da 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]

il problema è che se ci provi nc -z www.google.com 8000 può richiedere molto tempo - 5 secondi in più. Se lo faccio, -w 1ci vogliono 5 secondi. Se lo faccio, -w 3ci vogliono circa 3 volte di più .. 15 lampeggi del cursore, 15 secondi. -w 1è pensato per essere un secondo ma testato su cygwin.,. 5 secondi. È super veloce quando c'è un server sulla porta ma un po 'lento quando non c'è.
barlop

non maledire nuove righe nei commenti ... Sembra essere un bug con Cygwin. I test con Linux Mint mostrano un ritardo di quanti secondi siano stati specificati. eseguito questo per testare: data; nc-zw5 www.google.com 8000; data
Falsenames

Ho anche votato @BenjiWiebe con le richieste nmap. nc è più facile da inserire in uno script, ma è MOLTO più facile da usare visivamente nmap.
Falsenames,

Provandolo in knoppix. nc -zv -w 1 www.google.com Come si fa a provarlo una volta sola? Quando lo provo, sì, il -w 1 funziona ma ogni secondo riprova finché non faccio Ctrl-C.
barlop

Non sono sicuro di cosa stia facendo la versione Knoppix di "nc -zv -w 1 www.google.com 80". Funziona bene sul mio sistema, interrogando una volta e rilasciando proprio come dovrebbe fare -z. Inoltre, senza il numero di porta specificato, il mio non riesce dicendo che non è stata specificata alcuna porta.
Falsenames,

18

Puoi anche usare nping(parte di 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

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

Collaudo QUALSIASI porta, (porte che non sono aperte) e continuo a ricevere sempre due handshake ...
Shayan

8

Puoi farlo nella shell con Python come copertina non così corta:

$ 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

5

Solo per riferimento, volevo condividere un post di Vivek Gite: https://www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-using-linux-unix/# comment-920.398

Elenca vari modi, alcuni dei quali sono già pubblicati qui. Ma il più sorprendente per me non era altro che 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"

O una versione super semplice: basta guardare l'output del seguente modello di comando:

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

Utile quando si lavora con contenitori docker casuali.


looking at the output- solo l'ispezione del codice di ritorno $?può essere utile. Inoltre si blocca su porte chiuse, potrebbe essere un po 'di timeout può essere configurato ovunque ...
vp_arth

Questa soluzione sembra pulita, ma echo >/dev/tcp/{hostname}/{portnumber}non termina quando la porta è chiusa. E echo >/dev/tcp/{hostname}/{portnumber}non mostra nulla anche se la porta è aperta e posso vederla su un browser.
mmorin

Ciao mmorin, quale sistema operativo usi? Su Ubuntu si comporta come previsto: se la porta è chiusa, ottengo Connection refused. Altrimenti, non esce mostrando nulla e echo $?mostrando il codice di uscita1
Jacek

3

Aggiungo lo watchstrumento qui:

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

È semplice con nmap

esempi:

#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

Per maggiori informazioni vedi questo:

digitare nella riga di comando questo: man nmap

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


1

Stai cercando di testare la comunicazione o ottenere una risposta dalla porta 80 su quel nodo? PINGproverà a stabilire una comunicazione con un host specifico tramite ICMP che non ha nulla a che fare con le porte.

Prova invece http://nmap.org/ per controllare le informazioni sulla porta e testare la comunicazione:

nmap -v -p 80 onofri.org

1
Non sono sicuro di quale versione di nmap stai usando. Sul mio sistema, richiede che -v e -p siano separati come 'nmap -v -p 80 onofri.org'. Questo perché -v e -vv significano cose diverse, -v prendendo più v come argomento.
Falsenames,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.