Einen bestimmten Port anpingen


673

Nur eine kurze Überprüfung hier.

Können Sie einen bestimmten Port einer Maschine anpingen und wenn ja, können Sie ein Beispiel angeben?

Ich suche so etwas wie ping ip address portNum.


1
Für Windows kann diese Frage überprüft werden
npocmaka

Antworten:


721

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.


15
Möglicherweise möchten Sie hinzufügen -PN, um die Hosterkennung zu überspringen, die nmap normalerweise durchführt, bevor Sie den angegebenen Port testen.
Flokra

27
Um einigen Leuten Ärger zu ersparen: nmap / kann / kann unter Windows über Link (oder Google 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.

23
Für andere: nmap existiert unter Mac OS X nicht, Sie können nmap über Homebrew brew install nmapoder MacPorts installieren .
Highway of Life

17
nping ist für diese aufgabe besser geeignet als nmap. nping ist Teil der nmap-Verteilung.
CMCDragonkai

6
Mac OSX hat "Network Utility", die eine Registerkarte Port-Scanner hat
Shanimal

192

Ö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+ ].


23
netcatfunktioniert auch super und ist weniger ausführlich.
Petrus

3
Telnet funktioniert gut, wenn der Port ein TCP-Port ist.
Falcon Momot

6
Netcat arbeitet auch mit UDP (nc -u)
Tsvetomir Dimitrov

1
Für Mac-Benutzer - netcatist jetzt in MacOS HighSierra integriert, wobei Telnet von HomeBrew aus installiert werden kannbrew install telnet
sandiejat

99
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!

10
Wenn Sie timelike in verwenden, haben time nc -vz www.example.com 80Sie auch eine Art RTT.
Xebeche

3
Einzige Lösung, die auf Amazon EC2-Instanzen ohne Installation funktioniert.
Masadow

Was ist -z? ncat 6.40 auf rhel7 gibt es eine unbekannte Option
Tagar

@Tagar Laut Hilfe in der Ubuntu-Version ist -z der Zero-I / O-Modus, der zum Scannen verwendet wird.
Ben Mordecai

89

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


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

1
Anstelle von Paping können Sie auch Cryping verwenden, das schon viel länger verwendet wird und das Pingen einiger Dienste sowie Ports unterstützt.

Kann man damit einen beliebigen Port anpingen oder nur 80?
Luke Puplett

@ LukePuplett ändern Sie einfach die Nummer 80 im Beispiel. Führen Sie es aus, indem Sie paping.exe <Hostname / IP> -p <Portnummer> -c <Anzahl der Versuche> eingeben
David Costa

Das funktioniert super. Verwenden Sie diese -c *Option für ständiges Papieren (?).
user2924019


26

Versuchen Sie den curlBefehl, 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 .


3
Ich mag das, weil curles auf CentOS standardmäßig vorhanden ist, so dass ich nichts installieren muss.
bdemarest

Curl arbeitete an einem Himbeer-Pi (Distribution Raspian)
John M

1
Dies ist mit Abstand die eleganteste und universellste Lösung. Ich habe es leicht optimiert, um es zu einem ordentlichen Oneliner zu machen: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

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.


1
PsPing stammt ebenfalls vom Microsoft SysInternal-Team und kann daher im Umgang mit anderen Microsoft-orientierten Personen als etwas legitimer angesehen werden. (Und hat eine bessere Funktionalität als der sehr alte PortQry)
Martyvis

PSPing bietet den Vorteil, dass bei Verwendung eines benutzerdefinierten Ports die Latenz gemessen werden kann, was Test-NetConnection nicht kann (es gibt nur die ICMP-Antwortzeit an).
Jeff Miles

14

Unter Linux können Sie hping verwenden , es wird jedoch TCP anstelle von ICMP verwendet.

hping example.com -S -V -p 80

1
hping (hping3 in meinem Ubuntu) ist ausgezeichnet. Es wiederholt die Sonde in regelmäßigen Abständen wie Ping und im Gegensatz zu vielen der hier vorgeschlagenen Tools. Außerdem wird getestet, ob das Paket durchkommt und ob der Port offen ist. Wenn es offen ist, erhalten Sie flags=SA(dh SYN ACK), und wenn es geschlossen ist, erhalten Sie flags=SR(dh SYN RST). Beachten Sie, dass Sie das -VFlag hier wahrscheinlich nicht benötigen , aber Sie benötigen sudo / root, um hping auszuführen.
mc0e

Ausgezeichnet! Im Gegensatz zu vielen anderen Antworten werden hier die RTT-Latenz pingund Pings bis zum Stillstand gemeldet.
Edward Anderson

11

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.


1
PortQry wurde ursprünglich 1999/2000 vom MS Exchange-Team herausgegeben, aber die aktuelle Version von MS scheint es gestört zu haben, indem die Möglichkeit zum Abfragen von Remote-Ports (Gesundheit und Sicherheit) entfernt wurde.
Luke Puplett

8

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

5

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.


4

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

4

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.


2
Funktioniert perfekt unter Win 7 XP Pro Client / Win Server 2008 R2, um einen geschlossenen Port zu diagnostizieren. (Ich musste einen Schwellenwert von 30 Sekunden verwenden, aber das kann ein Problem mit bestimmten Server-Umgebung sein, kein Problem mit diesem Code)
David Zemens


1

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

0

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.


Zenmap ist auch für Windows verfügbar.
Nick Young
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.