Vous ne pouvez pas cingler les ports, car Ping utilise ICMP qui n'a pas le concept de ports. Les ports appartiennent aux protocoles de la couche de transport tels que TCP et UDP. Cependant, vous pouvez utiliser nmap pour voir si les ports sont ouverts ou non.
nmap -p 80 example.com
Edit: Comme le dit flokra, nmap est plus qu’un ping-pour-ports-thingy. C'est le meilleur ami des auditeurs de sécurité et des pirates informatiques et il propose une multitude d'options intéressantes. Vérifiez la doc pour tous les drapeaux possibles.
Vous voudrez peut-être ajouter -PNpour ignorer la découverte d'hôte que nmap fait généralement avant de tester le port donné.
Flokra
27
Pour éviter des ennuis à certaines personnes: nmap / can / peut être installé sur Windows à partir de link (ou google nmap windows), MAIS cela ne fonctionne pas sur les VPN. PaPing n'a pas semblé être capable de scanner une plage d'adresses. J'ai posté un script Python ci-dessous qui fonctionnera sur un réseau privé virtuel (VPN) pour analyser une plage de ports sur une plage d'adresses.
23
Pour les autres: nmap n'existe pas sous Mac OS X, vous pouvez installer nmap via homebrew brew install nmapou MacPorts.
Autoroute de la vie
17
nping convient mieux à cette tâche que nmap. nping fait partie de la distribution nmap.
CMCDragonkai
6
Mac OSX a «Utilitaire de réseau» qui a un onglet de scanner de port
Shanimal
192
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 '^]'.
netcatfonctionne aussi très bien et est moins prolixe.
Petrus
3
Telnet fonctionne bien pour cela si le port est un port TCP.
Falcon Momot
6
netcat fonctionne aussi avec UDP (nc -u)
Tsvetomir Dimitrov
1
Pour les utilisateurs de Mac - netcatMacOS HighSierra est maintenant intégré, dans lequel telnet peut être installé à partir de HomeBrewbrew install telnet
sandiejat
98
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
Vous pouvez également utiliser le cryptage, qui prend beaucoup plus de temps et prend en charge le ping de certains services et ports.
Est-ce que cela peut être utilisé pour faire un ping sur n'importe quel port ou juste 80?
Luke Puplett
@LukePuplett vient de changer le nombre 80 dans l'exemple. Exécutez-le en tapant paping.exe <nomhôte / IP> -p <numéro de port> -c <nombre de tentatives>
David Costa
Cela fonctionne très bien. utiliser -c *pour le taping constant (?).
user2924019
26
Non, vous ne pouvez pas, car pingutilise le protocole ICMP , qui n'a même pas de concept de ports.
La commande ci-dessus renvoie Fail sur un code d'état de sortie différent de zéro. Dans certains cas particuliers, tels que des réponses vides ou mal formées (voir man curl), vous voudrez peut-être traiter des codes de sortie spécifiques comme ayant abouti. Veuillez consulter cet article pour obtenir des explications plus détaillées.
J'aime cela car il curlest présent par défaut sur CentOS, je n'ai donc rien à installer.
bdemarest
curl travaillé sur une Raspberry Pi (distro Raspian)
John M
1
C'est de loin la solution la plus élégante et la plus universelle. Je l'ai légèrement modifié pour en faire un joli film:IP="<ip>" ; PORT="<port>" ; curl -s "$IP:$PORT" > /dev/null && echo "Success connecting to $IP on port $PORT." || echo "Failed to connect to $IP on port $PORT."
Lefty G Balogh
21
J'ai trouvé une solution plus simple en utilisant PsPing:
PsPing provient également de l'équipe Microsoft SysInternal et pourrait donc être considéré comme un peu plus légitime lorsqu'il traite avec d'autres personnes orientées Microsoft. (Et a une meilleure fonctionnalité que le très vieux PortQry)
martyvis
PSPing présente l'avantage de fournir une mesure de latence lors de l'utilisation d'un port personnalisé, ce que Test-NetConnection ne peut pas faire (il ne signale que le temps de réponse ICMP).
Jeff Miles le
14
Sous Linux, vous pouvez utiliser hping mais il utilise TCP plutôt que ICMP.
hping (hping3 dans mon Ubuntu) est excellent. Il répète périodiquement la sonde comme le fait le ping, et contrairement à la plupart des outils suggérés ici. Il teste également si le paquet passe et si le port est ouvert. Si c'est ouvert, vous obtenez flags=SA(c'est-à-dire SYN ACK) et s'il est fermé, vous obtenez flags=SR(c'est-à-dire SYN RST). Notez que vous n'avez probablement pas besoin du -Vdrapeau ici, mais que vous avez besoin de sudo / root pour exécuter hping.
mc0e
Excellent! Contrairement à de nombreuses autres réponses, cela indique une latence du RTT similaire pinget des pings jusqu’à l’arrêt.
Edward Anderson
11
Ping est très spécifique, mais si vous voulez vérifier si un port est ouvert et que vous utilisez une boîte Windows, alors PortQry est votre ami.
Je ne l'ai utilisé que pour tester les contrôleurs de domaine afin de détecter les problèmes de connectivité, mais cela a fonctionné à merveille et devrait donc fonctionner pour vous.
PortQry a été initialement publié en 1999/2000 par l'équipe MS Exchange, mais la version récente de MS semble l'avoir retardé en supprimant la possibilité d'interroger les ports distants (santé et sécurité).
Luke Puplett
8
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();
}
}
Rien ne garantit que le service exécuté sur le port comprend le ping. Cela pose également la question de la "saveur" du port que vous voulez utiliser, TCP ou UDP? Etant donné que le protocole "protocole" n'utilise aucun des deux (le ping est implémenté via ICMP ), cela n'a pas beaucoup de sens.
Je suis à peu près sûr que la sonde Nagios check_tcp fait ce que vous voulez. Ils peuvent être trouvés ici et bien que conçus pour être utilisés dans un contexte Nagios, ils 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
C’est la seule solution qui fonctionne pour les VPN dont l’ordinateur client est Windows Vista ou Windows 7 , les autres réponses répertoriées ne fonctionnant tout simplement pas. Cette réponse avait été précédemment supprimée et n'aurait pas dû l'être car il s'agit de la seule solution pour un cas commun réel. Puisqu'il n'y a pas de recours disponible pour la suppression, je le republie pour éviter aux autres la frustration que j'ai éprouvée à essayer d'utiliser les autres réponses.
L'exemple ci-dessous recherche les adresses IP sur le VPN ayant VNC / port 5900 ouvertes 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 quatre variables du haut doivent être modifiées pour s'adapter aux délais, au réseau, aux hôtes et aux ports nécessaires. 5,0 secondes sur mon VPN semblent suffire pour fonctionner correctement, moins de résultats ne sont pas (toujours) exacts. Sur mon réseau local, 0,5 était plus que suffisant.
Fonctionne parfaitement sur le client Win 7 XP Pro / Win Server 2008 R2 pour diagnostiquer le port fermé. (J'ai dû utiliser un seuil de délai d'expiration de 30 secondes, mais cela peut poser un problème avec un environnement de serveur spécifique et non pas un problème avec ce code)
Si vous utilisez un système d’exploitation * nix, essayez d’installer et d’utiliser «zenmap», c’est une interface graphique pour nmap et plusieurs profils d’analyse utiles qui aident beaucoup le nouvel utilisateur.
Réponses:
Vous ne pouvez pas cingler les ports, car Ping utilise ICMP qui n'a pas le concept de ports. Les ports appartiennent aux protocoles de la couche de transport tels que TCP et UDP. Cependant, vous pouvez utiliser nmap pour voir si les ports sont ouverts ou non.
Edit: Comme le dit flokra, nmap est plus qu’un ping-pour-ports-thingy. C'est le meilleur ami des auditeurs de sécurité et des pirates informatiques et il propose une multitude d'options intéressantes. Vérifiez la doc pour tous les drapeaux possibles.
la source
-PN
pour ignorer la découverte d'hôte que nmap fait généralement avant de tester le port donné.nmap windows
), MAIS cela ne fonctionne pas sur les VPN. PaPing n'a pas semblé être capable de scanner une plage d'adresses. J'ai posté un script Python ci-dessous qui fonctionnera sur un réseau privé virtuel (VPN) pour analyser une plage de ports sur une plage d'adresses.brew install nmap
ou MacPorts.Ouvrez une session telnet sur le port spécifique, par exemple:
Pour fermer votre session, appuyez sur Ctrl+ ].
la source
netcat
fonctionne aussi très bien et est moins prolixe.netcat
MacOS HighSierra est maintenant intégré, dans lequel telnet peut être installé à partir de HomeBrewbrew install telnet
la source
time
comme danstime nc -vz www.example.com 80
et vous aurez aussi une sorte de RTT.Si vous êtes sur une installation Windows avec powershell v4 ou plus récent, vous pouvez utiliser le module test-netconnection powershell:
Exemple: Test-NetConnection example.com -port 80
Cette cmdlet a également l'alias
tnc
. Par exempletnc example.com -port 80
la source
Vous pouvez utiliser PaPing:
http://code.google.com/p/paping
la source
-c *
pour le taping constant (?).Non, vous ne pouvez pas, car
ping
utilise le protocole ICMP , qui n'a même pas de concept de ports.la source
Essayez la
curl
commande, comme:Par exemple:
La commande ci-dessus renvoie Fail sur un code d'état de sortie différent de zéro. Dans certains cas particuliers, tels que des réponses vides ou mal formées (voir
man curl
), vous voudrez peut-être traiter des codes de sortie spécifiques comme ayant abouti. Veuillez consulter cet article pour obtenir des explications plus détaillées.la source
curl
est présent par défaut sur CentOS, je n'ai donc rien à installer.IP="<ip>" ; PORT="<port>" ; curl -s "$IP:$PORT" > /dev/null && echo "Success connecting to $IP on port $PORT." || echo "Failed to connect to $IP on port $PORT."
J'ai trouvé une solution plus simple en utilisant PsPing:
Cela fait partie de Windows Sysinternals .
la source
Sous Linux, vous pouvez utiliser hping mais il utilise TCP plutôt que ICMP.
la source
flags=SA
(c'est-à-dire SYN ACK) et s'il est fermé, vous obtenezflags=SR
(c'est-à-dire SYN RST). Notez que vous n'avez probablement pas besoin du-V
drapeau ici, mais que vous avez besoin de sudo / root pour exécuter hping.ping
et des pings jusqu’à l’arrêt.Ping est très spécifique, mais si vous voulez vérifier si un port est ouvert et que vous utilisez une boîte Windows, alors PortQry est votre ami.
Je ne l'ai utilisé que pour tester les contrôleurs de domaine afin de détecter les problèmes de connectivité, mais cela a fonctionné à merveille et devrait donc fonctionner pour vous.
la source
Voici une application de console .NET rapide et sale:
la source
Non.
Rien ne garantit que le service exécuté sur le port comprend le ping. Cela pose également la question de la "saveur" du port que vous voulez utiliser, TCP ou UDP? Etant donné que le protocole "protocole" n'utilise aucun des deux (le ping est implémenté via ICMP ), cela n'a pas beaucoup de sens.
la source
Je suis à peu près sûr que la sonde Nagios check_tcp fait ce que vous voulez. Ils peuvent être trouvés ici et bien que conçus pour être utilisés dans un contexte Nagios, ils sont tous des programmes autonomes.
la source
C’est la seule solution qui fonctionne pour les VPN dont l’ordinateur client est Windows Vista ou Windows 7 , les autres réponses répertoriées ne fonctionnant tout simplement pas. Cette réponse avait été précédemment supprimée et n'aurait pas dû l'être car il s'agit de la seule solution pour un cas commun réel. Puisqu'il n'y a pas de recours disponible pour la suppression, je le republie pour éviter aux autres la frustration que j'ai éprouvée à essayer d'utiliser les autres réponses.
L'exemple ci-dessous recherche les adresses IP sur le VPN ayant VNC / port 5900 ouvertes 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:
Les résultats ressemblaient à:
Les quatre variables du haut doivent être modifiées pour s'adapter aux délais, au réseau, aux hôtes et aux ports nécessaires. 5,0 secondes sur mon VPN semblent suffire pour fonctionner correctement, moins de résultats ne sont pas (toujours) exacts. Sur mon réseau local, 0,5 était plus que suffisant.
la source
Il existe un outil léger, appelé tcping: http://www.linuxco.de/tcping/tcping.html
la source
Dans le shell Bash, vous pouvez utiliser le fichier de pseudo-périphérique TCP , par exemple:
Voici la version implémentant un délai d'expiration de 1 seconde:
la source
Si vous utilisez un système d’exploitation * nix, essayez d’installer et d’utiliser «zenmap», c’est une interface graphique pour nmap et plusieurs profils d’analyse utiles qui aident beaucoup le nouvel utilisateur.
la source