Antworten:
Sie können keine Ports anpingen, da Ping ICMP verwendet, das nicht das Konzept von Ports hat. Ports gehören zu den Transportschichtprotokollen wie TCP und UDP. Sie können jedoch nmap verwenden , um festzustellen, ob Ports offen sind oder nicht
nmap -p 80 example.com
Edit: Wie bereits erwähnt, ist nmap mehr als nur ein Ping-for-Ports-Ding. Es ist der beste Freund der Sicherheitsprüfer und Hacker und bietet jede Menge coole Optionen. Überprüfen Sie das Dokument auf alle möglichen Flags.
-PN
, um die Hosterkennung zu überspringen, die nmap normalerweise durchführt, bevor Sie den angegebenen Port testen.
nmap windows
) installiert werden , ABER es funktioniert nicht über VPNs. PaPing schien nicht in der Lage zu sein, einen Adressbereich zu scannen. Ich habe unten ein Python-Skript gepostet, das über VPN arbeitet, um einen Bereich von Ports auf einem Bereich von Adressen zu scannen.
brew install nmap
oder MacPorts installieren .
Öffnen Sie eine Telnet-Sitzung für den bestimmten Port. Beispiel:
# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.
Um Ihre Sitzung zu beenden, drücken Sie Ctrl+ ].
netcat
funktioniert auch super und ist weniger ausführlich.
netcat
ist jetzt in MacOS HighSierra integriert, wobei Telnet von HomeBrew aus installiert werden kannbrew install telnet
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
time
like in verwenden, haben time nc -vz www.example.com 80
Sie auch eine Art RTT.
Wenn Sie eine Windows-Installation mit Powershell v4 oder neuer ausführen, können Sie das Powershell-Modul test-netconnection verwenden:
Test-NetConnection <host> -port <port>
Beispiel: Test-NetConnection example.com -port 80
Dieses Cmdlet verfügt auch über den Alias tnc
. Z.Btnc example.com -port 80
Sie können PaPing verwenden:
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 *
Option für ständiges Papieren (?).
Nein, das können Sie nicht, da ping
das ICMP-Protokoll verwendet wird , das nicht einmal ein Konzept für Ports hat.
Versuchen Sie den curl
Befehl, wie:
$ curl host:port
Zum Beispiel:
$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.
Der obige Befehl gibt bei einem Exit-Statuscode ungleich Null " Fail" zurück . In bestimmten Fällen, z. B. bei einer leeren oder fehlerhaften Antwort (siehe man curl
), möchten Sie möglicherweise bestimmte Beendigungscodes als erfolgreich behandeln. Weitere Informationen hierzu finden Sie in diesem Beitrag .
curl
es auf CentOS standardmäßig vorhanden ist, so dass ich nichts installieren muss.
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."
Ich habe mit PsPing eine einfachere Lösung gefunden:
psping 192.168.2.2:5000
Es ist Teil von Windows Sysinternals .
PsPing implementiert Ping-Funktionalität, TCP-Ping, Latenz und Bandbreitenmessung.
Unter Linux können Sie hping verwenden , es wird jedoch TCP anstelle von ICMP verwendet.
hping example.com -S -V -p 80
flags=SA
(dh SYN ACK), und wenn es geschlossen ist, erhalten Sie flags=SR
(dh SYN RST). Beachten Sie, dass Sie das -V
Flag hier wahrscheinlich nicht benötigen , aber Sie benötigen sudo / root, um hping auszuführen.
ping
und Pings bis zum Stillstand gemeldet.
Ping ist sehr spezifisch, aber wenn Sie überprüfen möchten, ob ein Port offen ist oder nicht und eine Windows-Box verwenden, ist PortQry Ihr Freund.
Ich habe es nur zum Testen von Domänencontrollern auf Konnektivitätsprobleme verwendet, aber es hat gut funktioniert, sollte also für Sie funktionieren.
Hier ist eine schnelle und schmutzige .NET-Konsolen-App:
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();
}
}
Nein.
Es gibt keine Garantie dafür, dass der auf dem Port ausgeführte Dienst Ping versteht. Es wirft auch die Frage auf, welche "Variante" des Ports Sie anpingen möchten, TCP oder UDP? Da das "Ping" -Protokoll keine verwendet (Ping wird mit ICMP implementiert ), ergibt es keinen Sinn.
Ich bin mir ziemlich sicher, dass Nagios check_tcp probe macht, was Sie wollen. Sie finden sich hier und obwohl entwickelt , um in einem Nagios Kontext verwendet werden, sie sind alle eigenständige Programme.
$ ./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
Dies ist die einzige Lösung, die für VPNs mit dem Clientcomputer Windows Vista oder Windows 7 funktioniert, da andere aufgelistete Antworten einfach nicht funktionieren. Diese Antwort wurde zuvor gelöscht und hätte nicht gelöscht werden dürfen, da dies die einzige Lösung für einen alltäglichen Fall ist. Da für das Löschen kein Rechtsmittel verfügbar ist, stelle ich es erneut zur Verfügung, um anderen die Frustration zu ersparen, die ich beim Versuch hatte, die anderen Antworten zu verwenden.
Das folgende Beispiel zeigt, welche IP-Adressen im VPN mit VNC / Port 5900 geöffnet sind, wenn der Client unter Windows 7 ausgeführt wird.
Ein kurzes Python (v2.6.6) -Skript zum Scannen einer bestimmten Liste von IPs und 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."
Die Ergebnisse sahen folgendermaßen aus:
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.
Die vier Variablen am oberen Rand müssten geändert werden, damit sie dem Zeitlimit, dem Netzwerk, den Hosts und den Ports entsprechen, die benötigt werden. 5,0 Sekunden auf meinem VPN schienen ausreichend zu sein, um richtig und konsistent zu arbeiten, weniger lieferte (immer) keine genauen Ergebnisse. In meinem lokalen Netzwerk war 0,5 mehr als genug.
Es gibt ein leichtes Tool dafür, das tcping heißt: http://www.linuxco.de/tcping/tcping.html
In der Bash-Shell können Sie eine TCP- Pseudo-Gerätedatei verwenden , zum Beispiel:
</dev/tcp/serverfault.com/80 && echo Port open || echo Port closed
In der folgenden Version ist eine Zeitüberschreitung von 1 Sekunde implementiert:
timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed
Wenn Sie ein * nix-Betriebssystem verwenden, versuchen Sie, "zenmap" zu installieren und zu verwenden, es ist eine GUI für nmap und verfügt über mehrere nützliche Scan-Profile, die dem neuen Benutzer eine große Hilfe sind.