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
.
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.
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+].
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
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
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
Non, vous ne pouvez pas, car ping
utilise le protocole ICMP, qui n'a même pas un concept de ports.
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.
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.
Sous Linux, vous pouvez utiliser hping mais il utilise TCP, plutôt que ICMP.
hping example.com -S -V -p 80
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.
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();
}
}
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.
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.
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
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
Il existe un outil léger, appelé tcping: http://www.linuxco.de/tcping/tcping.html
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>
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.