832 votes

Ping d'un port spécifique

Juste un petit contrôle de bon sens ici.

Pouvez-vous faire un ping sur un port spécifique d'une machine, et si oui, pouvez-vous fournir un exemple ?

Je cherche quelque chose comme ping ip address portNum .

2 votes

Pour Windows cette question peut être vérifié

9voto

Luke Puplett Points 929

Voici une application 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();
        }
    }

5voto

dlras2 Points 7589

Non.

Il n'y a aucune garantie que le service fonctionnant sur le port comprenne le ping. Cela soulève également la question de savoir quelle "saveur" de port vous souhaitez utiliser pour le ping, TCP ou UDP ? Puisque le "protocole" ping n'utilise ni l'un ni l'autre (ping est implémenté en utilisant le protocole ICMP ), cela n'a pas beaucoup de sens.

5voto

Mark Ribau Points 168

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

L'exemple ci-dessous trouve les IPs sur le VPN qui ont VNC/port 5900 ouvert avec le client fonctionnant sur Windows 7.

Un court script Python (v2.6.6) pour scanner une liste donnée d'IPs 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 sont les suivants :

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 du haut doivent être modifiées pour correspondre au délai d'attente, au réseau, aux hôtes et aux ports nécessaires. 5.0 secondes sur mon VPN semble être suffisant pour fonctionner correctement de manière constante, mais ne donne pas (toujours) des résultats précis. Sur mon réseau local, 0,5 était plus que suffisant.

2 votes

Fonctionne parfaitement sur Win 7 XP Pro client / Win Server 2008 R2 pour diagnostiquer un port fermé. (J'ai dû utiliser un seuil de 30 secondes pour le délai d'attente mais cela peut être un problème avec un environnement de serveur spécifique et non un problème avec ce code).

4voto

mwfearnley Points 684

Il semble que CMCDragonkai La suggestion judicieuse de nping n'a pas été transformée en une réponse appropriée.

nping example.com --tcp-connect -p 80,443

4voto

fvu Points 641

Je suis sûr que la sonde check_tcp de Nagios fait ce que vous voulez. Elles peuvent être trouvées aquí et bien que 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X