Risposte:
Non è possibile eseguire il ping delle porte, poiché Ping utilizza ICMP che non ha il concetto di porte. Le porte appartengono ai protocolli del livello di trasporto come TCP e UDP. Tuttavia, è possibile utilizzare nmap per vedere se le porte sono aperte o meno
nmap -p 80 example.com
Modifica: come menzionato flokra, nmap è molto più di un semplice ping-per-porti. È il migliore amico dei revisori della sicurezza e degli hacker e offre moltissime opzioni interessanti. Controlla il documento per tutte le possibili bandiere.
-PN
per saltare la scoperta dell'host che di solito fa nmap prima di testare la data porta.
nmap windows
), MA non funziona tramite VPN. Il PaPing non sembra essere in grado di scansionare un intervallo di indirizzi. Di seguito ho pubblicato lo script Python che funzionerà su VPN per scansionare un intervallo di porte su un intervallo di indirizzi.
brew install nmap
o MacPorts.
Aprire una sessione telnet sulla porta specifica, ad esempio:
# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.
Per chiudere la sessione, premi Ctrl+ ].
netcat
funziona anche alla grande ed è meno prolisso.
netcat
ora è integrato MacOS HighSierra, in cui Telnet può essere installato da HomeBrewbrew install telnet
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
time
like in time nc -vz www.example.com 80
e avrai anche una sorta di RTT.
Se stai eseguendo un'installazione di Windows con PowerShell v4 o più recente, puoi utilizzare il modulo PowerShell test-netconnection:
Test-NetConnection <host> -port <port>
Esempio: Test-NetConnection example.com -port 80
Questo cmdlet ha anche l'alias tnc
. Per esempiotnc example.com -port 80
Puoi usare 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
-c *
per paping costante (?).
No, non puoi, perché ping
utilizza il protocollo ICMP , che non ha nemmeno un concetto di porte.
Prova il curl
comando, come:
$ curl host:port
Per esempio:
$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.
Il comando sopra restituirà Fail su codici di stato di uscita diversi da zero. In alcuni casi particolari, come risposta vuota o non valida (vedi man curl
), potresti voler gestire specifici codici di uscita come riusciti, quindi controlla questo post per una spiegazione più dettagliata.
curl
è presente di default su CentOS, quindi non devo installare nulla.
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."
Ho trovato una soluzione più semplice usando PsPing:
psping 192.168.2.2:5000
Fa parte di Windows Sysinternals .
PsPing implementa la funzionalità Ping, ping TCP, latenza e misurazione della larghezza di banda.
Su Linux puoi usare hping ma usa TCP, piuttosto che ICMP.
hping example.com -S -V -p 80
flags=SA
(cioè SYN ACK), e se è chiuso ottieni flags=SR
(cioè SYN RST). Nota che probabilmente non hai bisogno della -V
bandiera qui, ma hai bisogno di sudo / root per eseguire l'hping.
ping
e ping fino a quando non viene interrotto.
Il ping è molto specifico, ma se vuoi verificare se una porta è aperta o meno e se stai eseguendo una finestra di Windows, PortQry è tuo amico.
L'ho usato solo per testare i controller di dominio per problemi di connettività, ma ha funzionato a meraviglia, quindi dovrebbe funzionare per te.
Ecco un'app console .NET veloce e sporca:
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();
}
}
No.
Non è garantito che il servizio in esecuzione sulla porta comprenda il ping. Si apre anche la domanda su quale "sapore" di porta si desidera eseguire il ping, TCP o UDP? Dal momento che il ping "protocollo" utilizza né (ping è implementato usando ICMP ), non fa un sacco di senso.
Sono abbastanza sicuro che la sonda Nagios check_tcp fa quello che vuoi. Possono essere trovati qui e sebbene progettati per essere utilizzati in un contesto Nagios, sono tutti programmi autonomi.
$ ./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
Questa è l' unica soluzione che funziona per le VPN con il computer client Windows Vista o Windows 7 , poiché le altre risposte elencate semplicemente non funzionano. Questa risposta è stata precedentemente eliminata e non avrebbe dovuto essere, in quanto questa è l'unica soluzione per un caso comune nel mondo reale. Poiché non è disponibile alcun appello per l'eliminazione, lo ripubblico per salvare agli altri la frustrazione che ho avuto nel cercare di utilizzare le altre risposte.
L'esempio seguente trova quali IP sulla VPN che hanno VNC / porta 5900 si aprono con il client in esecuzione su Windows 7.
Un breve script Python (v2.6.6) per scansionare un determinato elenco di IP e porte:
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."
I risultati sembravano:
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.
Le quattro variabili in alto dovrebbero essere modificate per essere appropriate a qualsiasi timeout, rete, host e porte necessari. 5,0 secondi sulla mia VPN sembravano sufficienti per funzionare correttamente in modo coerente, meno non ha (sempre) dato risultati accurati. Sulla mia rete locale, 0,5 era più che sufficiente.
Esiste uno strumento leggero per esso, chiamato tcping: http://www.linuxco.de/tcping/tcping.html
Nella shell Bash, è possibile utilizzare il file pseudo-dispositivo TCP , ad esempio:
</dev/tcp/serverfault.com/80 && echo Port open || echo Port closed
Ecco la versione che implementa un timeout di 1 secondo:
timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed
Se stai eseguendo un sistema operativo * nix, prova a installare e utilizzare "zenmap", è una GUI per nmap e ha diversi utili profili di scansione che sono di grande aiuto per il nuovo utente.