Ping określonego portu

670

Szybka kontrola poczytalności tutaj.

Czy potrafisz pingować określony port komputera, a jeśli tak, czy możesz podać przykład?

Szukam czegoś takiego ping ip address portNum.

Davie
źródło
1
w
systemie

Odpowiedzi:

720

Nie możesz pingować portów, ponieważ Ping używa ICMP, który nie ma pojęcia portów. Porty należą do protokołów warstwy transportowej, takich jak TCP i UDP. Można jednak użyć nmap, aby sprawdzić, czy porty są otwarte, czy nie

nmap -p 80 example.com

Edycja: Jak wspomniano o flokrze, nmap jest czymś więcej niż tylko pingowaniem dla portów. Jest najlepszym przyjacielem audytorów bezpieczeństwa i hakerów i oferuje mnóstwo ciekawych opcji. Sprawdź w dokumencie wszystkie możliwe flagi.

sfussenegger
źródło
15
Możesz dodać, -PNaby pominąć wykrywanie hosta nmap zwykle robi przed przetestowaniem danego portu.
flokra
27
Aby zaoszczędzić niektórym ludziom kłopotów: nmap / można / zainstalować w systemie Windows z linku (lub google nmap windows), ALE to nie działa w sieci VPN. Wydawało się, że PaPing nie był w stanie zeskanować zakresu adresów. Poniżej zamieściłem skrypt Pythona, który będzie działał przez VPN, aby skanować zakres portów na różnych adresach.
23
Dla innych: nmap nie istnieje w Mac OS X, możesz zainstalować nmap poprzez homebrew brew install nmaplub MacPorts.
Autostrada życia
17
nping lepiej nadaje się do tego zadania niż nmap. nping jest częścią rozkładu nmap.
CMCDragonkai
6
Mac OSX ma „Narzędzie sieciowe”, które ma zakładkę skanera portów
Shanimal
191

Otwórz sesję telnet na określonym porcie, na przykład:

# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.

Aby zamknąć sesję, naciśnij Ctrl+ ].

Ajay
źródło
23
netcatdziała również świetnie i jest mniej gadatliwy.
petrus
3
Telnet działa dobrze dla tego iff port jest portem TCP.
Falcon Momot
6
netcat również współpracuje z UDP (nc -u)
Tsvetomir Dimitrov 21.04.13
1
Dla użytkowników komputerów Mac - netcatjest teraz wbudowany w MacOS HighSierra, w którym telnet można zainstalować z HomeBrewbrew install telnet
sandiejat
98
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
Rahul Patil
źródło
10
Używaj z timepodobnymi, time nc -vz www.example.com 80a będziesz mieć też rodzaj RTT.
xebeche
3
Jedyne rozwiązanie, które działa na instancjach Amazon EC2 bez żadnej instalacji.
Masadow
co to jest -z? ncat 6.40 na rhel7 daje nieznaną opcję
Tagar
@Tagar, zgodnie z pomocą w wersji Ubuntu, -z jest trybem zero-I / O, używanym do skanowania.
Ben Mordecai
88

Jeśli korzystasz z instalacji systemu Windows z PowerShell v4 lub nowszą wersją, możesz użyć modułu PowerShell połączenia test-netconnection:

Test-NetConnection <host> -port <port>

Przykład: Test-NetConnection example.com -port 80

To polecenie cmdlet ma również alias tnc. Na przykładtnc example.com -port 80

Kjetil Limkjær
źródło
80

Możesz użyć 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

źródło
1
Lub zamiast tapetowania możesz użyć płaczu, który istnieje już znacznie dłużej i obsługuje pingowanie niektórych usług, a także portów.
Czy można tego użyć do pingowania dowolnego portu lub tylko 80?
Luke Puplett,
@LukePuplett wystarczy zmienić liczbę 80 w przykładzie. Uruchom go, wpisując paping.exe <nazwa hosta / IP> -p <numer portu> -c <liczba prób>
David Costa
To działa świetnie. używać -c *do ciągłego tapetowania (?).
user2924019 18.04.17
26

Nie, nie możesz, ponieważ pingużywa protokołu ICMP , który nawet nie ma pojęcia portów.

Baltazar
źródło
47
Jestem prawie pewien, że użycie „ping” było metaforyczne.
Luke Puplett,
26

Wypróbuj curlpolecenie, takie jak:

$ curl host:port

Na przykład:

$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.

Powyższe polecenie zwróci Fail na niezerową kodów stanu wyjść. W niektórych szczególnych przypadkach, takich jak pusta lub źle sformułowana odpowiedź (patrz man curl), możesz chcieć obsłużyć określone kody wyjścia jako udane, więc sprawdź ten post, aby uzyskać bardziej szczegółowe wyjaśnienia.

kenorb
źródło
3
Podoba mi się, ponieważ curljest domyślnie obecny w CentOS, więc nie muszę niczego instalować.
bdemarest
curl pracował na Raspberry Pi (distro Raspian)
John M
1
To zdecydowanie najbardziej eleganckie i uniwersalne rozwiązanie. Lekko go poprawiłem, aby był to fajny oneliner: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

Znalazłem prostsze rozwiązanie za pomocą PsPing:

psping 192.168.2.2:5000

Jest częścią Windows Sysinternals .

PsPing implementuje funkcjonalność Ping, ping ping, pomiar opóźnienia i przepustowości.

Ayan Mullick
źródło
1
Również PsPing pochodzi od zespołu Microsoft SysInternal, więc może być uważany za nieco bardziej uzasadniony w kontaktach z innymi osobami zorientowanymi na Microsoft. (I ma lepszą funkcjonalność niż bardzo stary PortQry)
martyvis 30.04.2018
PSPing ma tę zaletę, że zapewnia pomiar opóźnienia podczas korzystania z niestandardowego portu, czego nie może zrobić Test-NetConnection (raportuje tylko czas odpowiedzi ICMP).
Jeff Miles
14

W systemie Linux możesz użyć hping, ale używa on TCP, a nie ICMP.

hping example.com -S -V -p 80
c4f4t0r
źródło
1
hping (hping3 w moim ubuntu) jest doskonały. Okresowo powtarza sondę, podobnie jak ping, i w przeciwieństwie do wielu sugerowanych tutaj narzędzi. Sprawdza także, czy pakiet się przedostaje, i czy port jest otwarty. Jeśli jest otwarty, otrzymasz flags=SA(tj. SYN ACK), a jeśli jest zamknięty, otrzymasz flags=SR(tj. SYN RST). Zauważ, że prawdopodobnie nie potrzebujesz -Vtutaj flagi, ale potrzebujesz sudo / root, aby uruchomić hping.
mc0e,
Doskonały! W przeciwieństwie do wielu innych odpowiedzi, raportuje opóźnienie RTT, takie jak pingping i ping, aż do zatrzymania.
Edward Anderson
11

Ping jest bardzo specyficzny, ale jeśli chcesz sprawdzić, czy port jest otwarty, czy nie i używasz systemu Windows, PortQry jest twoim przyjacielem.

Użyłem go tylko do testowania kontrolerów domeny pod kątem problemów z łącznością, ale działało to na szczęście, więc powinno działać dla ciebie.

Obrabować
źródło
1
PortQry został pierwotnie wydany w 1999/2000 przez zespół MS Exchange, ale wydaje się, że najnowsza wersja MS go zahamowała, usuwając możliwość odpytywania zdalnych portów (zdrowie i bezpieczeństwo).
Luke Puplett,
8

Oto szybka i brudna aplikacja konsoli .NET:

    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();
        }
    }
Luke Puplett
źródło
5

Nie.

Nie ma gwarancji, że usługa działająca na porcie rozumie ping. Otwiera to również pytanie, jaki „smak” portu chcesz pingować, TCP czy UDP? Ponieważ „protokół” ping nie używa żadnego (ping jest implementowany przy użyciu ICMP ), nie ma to większego sensu.

rozwijać
źródło
4

Jestem pewien, że sonda Nagios check_tcp robi to, co chcesz. Można je znaleźć tutaj i chociaż zostały zaprojektowane do użycia w kontekście Nagios, wszystkie są samodzielnymi programami.

$ ./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
fvu
źródło
4

Jest to jedyne rozwiązanie, które działa w przypadku sieci VPN z komputerem klienckim z systemem Windows Vista lub Windows 7 , ponieważ inne wymienione odpowiedzi po prostu nie działają. Ta odpowiedź została wcześniej usunięta i nie powinna była być, ponieważ jest to jedyne rozwiązanie w typowym przypadku w świecie rzeczywistym. Ponieważ nie ma odwołania do usunięcia, odkładam go ponownie, aby zaoszczędzić innym frustracji związanej z próbą użycia innych odpowiedzi.

Poniższy przykład pokazuje, które adresy IP w sieci VPN, które mają VNC / port 5900, otwierają się przy kliencie z systemem Windows 7.

Krótki skrypt Pythona (v2.6.6) do skanowania danej listy adresów IP i portów:

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."

Wyniki wyglądały następująco:

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.

Cztery zmienne u góry powinny zostać zmienione, aby były odpowiednie dla potrzebnego limitu czasu, sieci, hostów i portów. Wydawało się, że 5,0 sekund w mojej sieci VPN wystarcza do prawidłowego działania, mniej (nie zawsze) daje dokładne wyniki. W mojej sieci lokalnej 0,5 było więcej niż wystarczające.

Mark Ribau
źródło
2
Działa doskonale na kliencie Win 7 XP Pro / Win Server 2008 R2 do diagnozowania zamkniętego portu. (Musiałem użyć 30-sekundowego progu przekroczenia limitu czasu, ale może to być problem z konkretnym środowiskiem serwera, a nie problem z tym kodem)
David Zemens
1

W powłoce Bash możesz użyć pliku pseudo-urządzenia TCP , na przykład:

</dev/tcp/serverfault.com/80 && echo Port open || echo Port closed

Oto wersja implementująca limit czasu 1 sekundy:

timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed
kenorb
źródło
0

Jeśli używasz systemu operacyjnego * nix, spróbuj zainstalować i używać „zenmap”, jest to GUI dla nmap i ma kilka przydatnych profili skanowania, które są wielką pomocą dla nowego użytkownika.


źródło
Zenmap jest również dostępny dla systemu Windows.
Nick Young