Est-il possible d'envoyer une requête ping à une adresse: port?


212

Je ne suis pas dans la mise en réseau, et j'ai la question suivante liée à la commande de ping de Linux .

Puis-je seulement cingler une adresse? Par exemple:

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 puis-je aussi envoyer une requête ping à une adresse: port , par exemple: onofri.org:80 ?

Si j'essaye celui-ci ça ne marche pas:

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

Est-il possible de faire un ping avec quelque chose comme adresse: port ? Si c'est possible, pourquoi ce que j'ai essayé ne fonctionne-t-il pas?


8
Qu'est-ce que vous essayez d'accomplir? Pour vérifier le bon fonctionnement du service, vous devez interroger le service et évaluer la réponse. Un serveur Web pourrait, par exemple, accepter votre connexion, mais renvoyer une erreur en raison d'une mauvaise configuration.
Daniel B

5
Cela fait partie de ce que j'aime chez Telnet. vous pouvez vous connecter à un serveur Web, taper GET /index.html HTTP\1.1et voir la réponse 200 (ou le code d'erreur) avec le balisage résultant.
Frank Thomas

7
@ FrankThomas HTTP\1.1? Vraiment?
Glglgl

5
@Navin Peut-être HTTP/1.1...
glglgl

3
@glglgl; quelle? vous ne mettez jamais un hack où une barre oblique devrait aller? mais vous avez raison, cela devrait être une barre oblique.
Frank Thomas

Réponses:


20

Vous pouvez utiliser Paping , un test de port TCP multiplateforme, émulant les fonctionnalités de ping (port ping)

(voir aussi Github car code.google.com a été amorti)

paping -p 80 google.com

8
Une explication de ce que fait ce programme serait utile.
David Schwartz

16
pour quiconque trouve cette réponse, comme moi, seulement pour trouver que le traitement du papier ne se trouve dans aucun référentiel et constitue un code ancien qui ne sera même pas compilé sur ARM - faites défiler l'écran plus loin jusqu'à la réponse 'hping'. C'est un point de chute parfait pour le ping lorsque vous devez tester un port et il est facilement accessible dans divers référentiels (Ubuntu, Arch), y compris ARM.
Marc

Comment puis-je installer paping? J'ai visité le repo mais il n'y a pas de version. Ah, tant pis .. le code de Google n'était pas accessible pour moi à l'époque.
Shayan

310

Les ports sont un concept de UDP et TCP . Les messages Ping sont techniquement appelés demande d' écho ICMP et réponse d'écho ICMP, qui font partie d' ICMP . ICMP, TCP et UDP sont des "frères et soeurs"; ils ne sont pas basés les uns sur les autres, mais sur trois protocoles distincts qui s'exécutent sur IP.

Par conséquent, vous ne pouvez pas pingun port. Ce que vous pouvez faire, c'est utiliser un scanner de port similaire nmap.

nmap -p 80 onofri.org

Vous pouvez également utiliser telnet onofri.org 80, comme suggéré dans l’une des autres réponses (cela donnera une erreur si le port est fermé ou filtré).


22
+1 vous comprenez bien. ICMP est construit sur le dessus de l'IP, qui a un concept d'adresses IP mais pas de ports. TCP et UDP sont également au-dessus d'IP, et ce sont ces protocoles qui ajoutent des "ports". ICMP, TCP et UDP sont tous au même "niveau" en termes de protocole par lequel ils sont transportés.
Jason C

14
+1 Beaucoup, beaucoup de gens pensent que s’ils ne peuvent pas envoyer de ping à quelque chose, ils ne peuvent pas s'y connecter ... mais comme vous dites, ICMP est différent de TCP et UDP: si vous avez l’intention de servir, par exemple, une page Web sur TCP 80, que vous devez seulement ouvrir TCP 80 sur le pare-feu, rien d’autre (pour que Ping sur la même adresse IP puisse (... devrait!) être bloqué, par exemple)
Olivier Dulac

6
Pour que les informations restent exactes, ICMP n'est pas un protocole de couche de transport tel que TCP ou UDP. Comme un certain nombre de protocoles, il ne rentre pas entièrement dans les modèles conceptuels de réseau, mais il est généralement considéré comme un protocole de couche réseau / interréseau, au même titre que IP. Il a aussi parfois été appelé protocole L3.5.
YLearn

2
@BenjiWiebe, d'accord, mais encore une fois, pour des raisons de précision, la déclaration doit être faite, c'est pourquoi je l'ai ajoutée. Jusqu'à présent, tout ce qui est dit, c'est qu'ICMP, TCP et UDP sont liés. Le commentaire le plus voté va même jusqu'à dire qu'ils sont tous au même "niveau". Bien que cela ne fasse aucune différence pour l'utilisateur moyen, de nombreux utilisateurs autres que les utilisateurs moyens consultent ce site.
YLearn

4
@OlivierDulac Je ne sais pas si vous devriez le bloquer. La plupart des serveurs Web que je connais la laissent ouverte. ICMP fait circuler Internet. Pourquoi voudriez-vous que les gens pensent qu'ils ne peuvent pas vous joindre s'ils le peuvent?
Cruncher

86

J'utilise Telnet , car il est intégré à de nombreuses plates-formes sans téléchargement supplémentaire.

Utilisez simplement la commande telnet pour vous connecter au port que vous souhaitez tester. Si vous recevez le message ci-dessous ou un message du service lui-même, le port est actif.

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

Si vous connaissez la séquence de commandes du service auquel vous vous connectez, vous pouvez taper une commande ( HTTP / FTP GET par exemple) et observer la réponse et la sortie dans le terminal. Ceci est très utile pour tester le service lui-même, car il vous montrera les informations d'erreur envoyées au client, telles que les erreurs HTTP 500.

Si vous recevez un message indiquant que la connexion a été refusée, le port est fermé.

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

8
De plus, si l'écran devient complètement noir, c'est un signe que vous êtes également connecté.
Tensigh

Excellente suggestion. J'avais l'habitude de l'utiliser pour tester si un serveur Web était opérationnel alors qu'un navigateur Web n'était pas une option facile.
Brandon

@Brandon comme quand on entre dans des machines de développement ^. ^
Cruncher le

Les outils de développement dans les navigateurs sont beaucoup plus faciles, car ils envoient toujours tous les en-têtes de requête HTTP appropriés, mais vous pouvez consulter la réponse HTTP complète. Là encore, si vous souhaitez personnaliser la demande également, alors telnet est la voie à suivre.
Courses de légèreté en orbite

Je pense que toutes les réponses ici manquent l’information la plus cruciale. Techniquement, ne serait-il pas possible de "cingler" un port comme suit? Vous pouvez établir une connexion TCP / UDP et compter le nombre de millisecondes requis pour établir cette connexion.
David

48

Oui, utilisez HPing pour le faire:

$ 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

Notez qu'il a besoin des privilèges root (ou des fonctionnalités SELinux) pour créer des paquets IP bruts, tout comme ping (qui est probablement suid sur votre système).


3
J'aimerais que ce soit la "réponse acceptée". hping était facile à trouver dans plusieurs dépôts, à la différence du paping qui est un ancien code cruel qui ne compile pas sous ARM. De plus, contrairement à NMAP, haping renvoie un code d'état facilement vérifiable à partir d'un script shell. Il constitue donc un substitut idéal à l'endroit où vous utiliseriez sinon le ping. Merci pour cette réponse, dommage que je n’aie pas fait défiler la liste assez loin pour la voir et qu’elle ait dû la trouver sur un autre site Web.
Marc

Je ne peux pas installer hping dans Ubuntu .. Package non trouvé .. Mais j'ai trouvé hping3.Est-ce la même chose que hping3? @ d33tah
Shayan

Ok, j'ai essayé hping3et tous les ports sont pingés .. Peu importe que ce soit fermé ou ouvert .. Comment savoir si un port est fermé ou ouvert?
Shayan

46

Vous pouvez utiliser netcat pour vous connecter à un port spécifique pour voir si vous obtenez une connexion. L'option -v augmentera la verbosité pour indiquer si le port est ouvert ou fermé. L'indicateur -z entraînera la fermeture de netcat une fois la connexion établie. Vous pouvez ensuite utiliser les codes de sortie via $? pour voir si la connexion était établie ou non.

$ 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

De plus, vous pouvez utiliser mtr avec l'indicateur -T pour tcp et l'indicateur -P pour spécifier un port. Cela fera quelque chose de similaire à un traceroute sur TCP au lieu de simplement ICMP. Cela peut être exagéré, cependant.

soupir je dois modifier pour ajouter ce bit, car nous ne pouvons pas mettre du code dans les commentaires. Knoppix est peut-être en train de faire quelque chose de différent avec sa version de netcat, mais c'est ce que je tire de 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]

Le problème, c’est que si vous essayez, nc -z www.google.com 8000 cela peut prendre beaucoup de temps - plus de 5 secondes. Si je fais -w 1alors cela prend 5 secondes. Si je le fais, -w 3cela prend environ 3 fois plus de temps .. 15 clignotements du curseur, 15 secondes. -w 1est censé être une seconde mais testé sur cygwin.,. 5 secondes. C'est super rapide quand il y a un serveur sur le port mais un peu lent quand il n'y en a pas.
barlop

ne maudissez pas de nouvelles lignes dans les commentaires ... Cela semble être un bug avec cygwin. Les tests avec linux Mint indiquent un délai de quelques secondes. a exécuté ceci pour tester: date; nc-zw5 www.google.com 8000; date
prénoms

J'ai également voté @BenjiWiebe avec les requêtes nmap. nc est plus facile à mettre dans un script, mais il est BEAUCOUP plus facile d'utiliser nmap visuellement.
Falsenames

L'essayer dans Knoppix. nc -zv -w 1 www.google.com Comment essayez-vous de l'essayer une fois? Quand je l'essaie oui, le -w 1 fonctionne mais chaque seconde il réessaye jusqu'à ce que je fasse Ctrl-C.
barlop

Pas sûr de ce que fait la version Knoppix de "nc -zv -w 1 www.google.com 80". Cela fonctionne très bien sur mon système, interroger une fois et abandonner comme -z est censé le faire. De plus, sans le numéro de port spécifié, le mien échoue en indiquant qu'aucun port n'est spécifié.
Falsenames

18

Vous pouvez aussi utiliser nping(une partie 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

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

Je teste N'IMPORTE QUEL port, (ports non ouverts) et je reçois toujours deux poignées de main tout le temps ...
Shayan

8

Vous pouvez faire cela dans le shell avec Python comme un liner pas si court:

$ 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

Juste pour référence, je voulais partager un post de Vivek Gite: https://www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-using-linux-unix/# commentaire-920398

Il énumère diverses manières, dont certaines sont déjà publiées ici. Mais le plus surprenant pour moi n’était autre 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 une version super simple: il suffit de regarder le résultat du modèle de commande suivant:

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

Utile lorsque vous travaillez avec des conteneurs de docker aléatoires.


looking at the output- seulement inspecter le code retour $?peut être utile. En outre, il se bloque sur les ports fermés, peut-être un certain délai peut être configuré n'importe où ...
vp_arth

Cette solution semble soignée, mais echo >/dev/tcp/{hostname}/{portnumber}ne se termine pas lorsque le port est fermé. Et echo >/dev/tcp/{hostname}/{portnumber}ne montre rien même si le port est ouvert et que je peux le voir sur un navigateur.
miguelmorin le

Bonjour mmorin, quel système d'exploitation utilisez-vous? Sous Ubuntu, il se comporte comme prévu: si le port est fermé, je reçoisConnection refused . Sinon, la sortie n’affiche rien et echo $?indique le code de sortie1
Jacek

3

J'ajoute un watchoutil ici:

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

C'est simple avec nmap

exemples:

#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

Pour plus d'informations, voir ceci:

tapez en ligne de commande ceci: man nmap

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


1

Essayez-vous de tester la communication ou d'obtenir une réponse du port 80 sur ce nœud? PINGessaiera d’établir une communication avec un hôte spécifique via ICMP qui n’a rien à voir avec les ports.

Essayez plutôt http://nmap.org/ pour vérifier les informations sur le port et tester la communication:

nmap -v -p 80 onofri.org

1
Vous ne savez pas quelle version de nmap vous utilisez. Sur mon système, il faut que -v et -p soient séparés, comme 'nmap -v -p 80 onofri.org'. En effet, -v et -vv signifient différentes choses, -v prenant plus de v comme argument.
Falsenames
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.