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.
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 '^]'.
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.
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."
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 (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.
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();
}
}
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.
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
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."
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.
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)
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.
Odpowiedzi:
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
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.
źródło
-PN
aby pominąć wykrywanie hosta nmap zwykle robi przed przetestowaniem danego portu.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.brew install nmap
lub MacPorts.Otwórz sesję telnet na określonym porcie, na przykład:
Aby zamknąć sesję, naciśnij Ctrl+ ].
źródło
netcat
działa również świetnie i jest mniej gadatliwy.netcat
jest teraz wbudowany w MacOS HighSierra, w którym telnet można zainstalować z HomeBrewbrew install telnet
źródło
time
podobnymi,time nc -vz www.example.com 80
a będziesz mieć też rodzaj RTT.Jeśli korzystasz z instalacji systemu Windows z PowerShell v4 lub nowszą wersją, możesz użyć modułu PowerShell połączenia test-netconnection:
Przykład: Test-NetConnection example.com -port 80
To polecenie cmdlet ma również alias
tnc
. Na przykładtnc example.com -port 80
źródło
Możesz użyć PaPing:
http://code.google.com/p/paping
źródło
-c *
do ciągłego tapetowania (?).Nie, nie możesz, ponieważ
ping
używa protokołu ICMP , który nawet nie ma pojęcia portów.źródło
Wypróbuj
curl
polecenie, takie jak:Na przykład:
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.źródło
curl
jest domyślnie obecny w CentOS, więc nie muszę niczego instalować.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."
Znalazłem prostsze rozwiązanie za pomocą PsPing:
Jest częścią Windows Sysinternals .
źródło
W systemie Linux możesz użyć hping, ale używa on TCP, a nie ICMP.
źródło
flags=SA
(tj. SYN ACK), a jeśli jest zamknięty, otrzymaszflags=SR
(tj. SYN RST). Zauważ, że prawdopodobnie nie potrzebujesz-V
tutaj flagi, ale potrzebujesz sudo / root, aby uruchomić hping.ping
ping i ping, aż do zatrzymania.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.
źródło
Oto szybka i brudna aplikacja konsoli .NET:
źródło
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.
źródło
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.
źródło
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:
Wyniki wyglądały następująco:
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.
źródło
Jest do tego lekkie narzędzie o nazwie tcping: http://www.linuxco.de/tcping/tcping.html
źródło
W powłoce Bash możesz użyć pliku pseudo-urządzenia TCP , na przykład:
Oto wersja implementująca limit czasu 1 sekundy:
źródło
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