web-dev-qa-db-fra.com

Ping un port spécifique

Juste un rapide test de santé mentale ici.

Pouvez-vous envoyer une requête ping à un port spécifique d'une machine, et si oui, pouvez-vous fournir un exemple?

Je cherche quelque chose comme ping ip address portNum.

701
Davie

Vous ne pouvez pas envoyer de ping aux ports, car Ping utilise ICMP qui n'a pas le concept de ports. Les ports appartiennent aux protocoles de couche transport comme TCP et UDP. Cependant, vous pouvez utiliser nmap pour voir si les ports sont ouverts ou non

nmap -p 80 example.com

Edit: Comme Flokra l'a mentionné, nmap est plus qu'un simple ping-for-ports-thingy. C'est le meilleur ami des auditeurs de sécurité et des pirates et est livré avec des tonnes d'options intéressantes. Consultez le doc pour tous les drapeaux possibles.

741
sfussenegger

Ouvrez une session telnet sur le port spécifique, par exemple:

# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.

Pour fermer votre session, appuyez sur Ctrl+].

197
Pipo
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
106
Rahul Patil

Si vous êtes sur une installation Windows avec powershell v4 ou plus récent, vous pouvez utiliser le module powershell test-netconnection:

Test-NetConnection <Host> -port <port>

Exemple: Test-NetConnection example.com -port 80

Cette applet de commande a également l'alias tnc. Par exemple tnc example.com -port 80

102
Kjetil Limkjær

Vous pouvez utiliser PaPing:

http://code.google.com/p/paping

C:\>paping.exe www.google.com -p 80 -c 4
paping v1.5.1 - Copyright (c) 2010 Mike Lovell

Connecting to www.l.google.com [209.85.225.147] on TCP 80:

Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=25.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80

Connection statistics:
        Attempted = 4, Connected = 4, Failed = 0 (0.00%)
Approximate connection times:
        Minimum = 24.00ms, Maximum = 25.00ms, Average = 24.25ms
80
CodhubIV

Non, vous ne pouvez pas, car ping utilise le protocole ICMP, qui n'a même pas un concept de ports.

26
Martin B

Essayez la commande curl, comme:

$ curl Host:port

Par exemple:

$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.

La commande ci-dessus renverra Échec sur un code d'état de sortie non nul. Dans certains cas particuliers, comme une réponse vide ou mal formée (voir man curl), vous souhaiterez peut-être gérer des codes de sortie spécifiques avec succès, veuillez donc vérifier ceci post pour une explication plus détaillée.

26
kenorb

J'ai trouvé une solution plus simple en utilisant PsPing:

psping 192.168.2.2:5000

Cela fait partie de Windows Sysinternals .

PsPing implémente la fonctionnalité Ping, TCP ping, latence et mesure de la bande passante.

22
Ayan Mullick

Sous Linux, vous pouvez utiliser hping mais il utilise TCP, plutôt que ICMP.

hping example.com -S -V -p 80
15
c4f4t0r

Ping est très spécifique mais si vous voulez vérifier si un port est ouvert ou non, et que vous exécutez une boîte Windows, alors PortQry est votre ami.

Je ne l'ai utilisé que pour tester les contrôleurs de domaine pour les problèmes de connectivité, mais cela a fonctionné pour cela, donc cela devrait fonctionner pour vous.

11
Rob

Voici une application de console .NET rapide et sale:

    static void Main(string[] args)
    {
        string addressArgument = null, portArgument = null;

        System.Net.Sockets.TcpClient tcpClient = null;

        try
        {
            addressArgument = args[0];
            portArgument = args[1];

            int portNumber;
            portNumber = Int32.Parse(portArgument);

            tcpClient = new System.Net.Sockets.TcpClient();
            tcpClient.ReceiveTimeout = tcpClient.SendTimeout = 2000;


            IPAddress address;
            if (IPAddress.TryParse(args[0], out address))
            {
                var endPoint = new System.Net.IPEndPoint(address, portNumber);
                tcpClient.Connect(endPoint);
            }
            else
            {
                tcpClient.Connect(addressArgument, portNumber);
            }

            Console.WriteLine("Port {0} is listening.", portArgument);
        }
        catch (Exception e)
        {
            if (e is SocketException || e is TimeoutException)
            {
                Console.WriteLine("Not listening on port {0}.", portArgument);
            }
            else
            {
                Console.WriteLine("Usage:");
                Console.WriteLine("    portquery [Host|ip] [port]");
            }
        }
        finally
        {
            if (tcpClient != null)
                tcpClient.Close();
        }
    }
8
Luke Puplett

Non.

Il n'y a aucune garantie que le service exécuté sur le port comprend le ping. Cela ouvre également la question de la "saveur" du port que vous souhaitez envoyer, TCP ou UDP? Étant donné que le "protocole" ping n'utilise ni l'un ni l'autre (le ping est implémenté en utilisant ICMP ), cela n'a pas beaucoup de sens.

5
unwind

Il s'agit de la seule solution qui fonctionne pour les VPN avec la machine cliente Windows Vista ou Windows 7, car les autres réponses répertoriées ne fonctionnent tout simplement pas. Cette réponse a été précédemment supprimée et n'aurait pas dû l'être, car c'est la seule solution pour un cas courant du monde réel. Puisqu'il n'y a pas d'appel disponible pour la suppression, je le republie pour sauver les autres la frustration que j'ai eue en essayant d'utiliser les autres réponses.

L'exemple ci-dessous trouve les adresses IP sur le VPN qui ont VNC/port 5900 ouvert avec le client s'exécutant sur Windows 7.

Un court script Python (v2.6.6) pour analyser une liste donnée d'adresses IP et de ports:

from socket import *

fTimeOutSec = 5.0
sNetworkAddress = '192.168.1'
aiHostAddresses = range(1,255)
aiPorts = [5900]

setdefaulttimeout(fTimeOutSec)
print "Starting Scan..."
for h in aiHostAddresses:
    for p in aiPorts:
        s = socket(AF_INET, SOCK_STREAM)
        address = ('%s.%d' % (sNetworkAddress, h))
        result = s.connect_ex((address,p))
        if ( 0 == result ):
            print "%s:%d - OPEN" % (address,p)
        Elif ( 10035 == result ):
            #do nothing, was a timeout, probably Host doesn't exist
            pass
        else:
            print "%s:%d - closed (%d)" % (address,p,result)

        s.close()
print "Scan Completed."

Les résultats ressemblaient à:

Starting Scan...
192.168.1.1:5900 - closed (10061)
192.168.1.7:5900 - closed (10061)
192.168.1.170:5900 - OPEN
192.168.1.170:5900 - closed (10061)
Scan Completed.

Les quatre variables en haut devraient être modifiées pour correspondre au délai d'expiration, au réseau, aux hôtes et aux ports nécessaires. 5,0 secondes sur mon VPN semblaient être suffisantes pour fonctionner correctement de manière cohérente, moins ne donnaient pas (toujours) des résultats précis. Sur mon réseau local, 0,5 était plus que suffisant.

4
Mark Ribau

Je suis sûr que la sonde Nagios check_tcp fait ce que vous voulez. Ils peuvent être trouvés ici et bien qu'ils soient conçus pour être utilisés dans un contexte Nagios, ce sont tous des programmes autonomes.

$ ./check_tcp -H Host -p 22
TCP OK - 0.010 second response time on port 22|time=0.009946s;0.000000;0.000000;0.000000;10.000000
4
fvu

Dans Bash Shell, vous pouvez utiliser TCP fichier pseudo-périphérique , par exemple:

</dev/tcp/serverfault.com/80 && echo Port open || echo Port closed

Voici la version implémentant un timeout de 1 seconde:

timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed
2
kenorb

Il existe un outil léger, appelé tcping: http://www.linuxco.de/tcping/tcping.html

2
Craig

je me sens chanceux sur google pour "cingler un port spécifique": http://philwilks.blogspot.com/2008/01/ping-specific-port.html , donc NON, vous ne pouvez pas cingler un port spécifique

vous pouvez utiliser nmap cependant: nmap -p <port> <Host>

0
knittl

Si vous utilisez un système d'exploitation * nix, essayez d'installer et d'utiliser "zenmap", c'est une interface graphique pour nmap et a plusieurs profils de scan utiles qui sont d'une grande aide pour le nouvel utilisateur.

0
user604952