Czy można pingować adres: port?

212

Nie jestem zainteresowany pracą w sieci i mam następujące pytanie związane z poleceniem ping systemu Linux .

Czy mogę pingować tylko adres? Na przykład:

miner@raspberrypi ~ $ ping onofri.org
PING onofri.org (67.222.36.105) 56(84) bytes of data.
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

Czy mogę również pingować adres: port , na przykład: onofri.org:80 ?

Jeśli spróbuję tego, to nie działa:

miner@raspberrypi ~ $ ping onofri.org:80
ping: unknown host onofri.org:80

Czy to możliwe, że ping coś takiego jak adres: port ? Jeśli to możliwe, dlaczego to, czego próbowałem, nie działa?

AndreaNobili
źródło
8
Co próbujesz osiągnąć Weryfikacja poprawności działania usługi wymaga wysłania zapytania do usługi i oceny odpowiedzi. Serwer WWW może na przykład zaakceptować połączenie, ale zwróci błąd z powodu błędnej konfiguracji.
Daniel B
5
To część tego, co lubię w Telnet. możesz połączyć się z serwerem internetowym, wpisać GET /index.html HTTP\1.1i zobaczyć odpowiedź 200 (lub kod błędu) wraz z wynikowym znacznikiem.
Frank Thomas
7
@FrankThomas HTTP\1.1? Naprawdę?
glglgl,
5
@Navin Może HTTP/1.1...
glglgl
3
@glglgl; co? nigdy nie wkładasz hacka tam, gdzie powinien się ciąć? ale masz rację, to powinno być cięcie.
Frank Thomas

Odpowiedzi:

20

Możesz użyć Paping , wieloplatformowego testowania portu TCP, emulującego funkcjonalność ping (ping ping)

(patrz także Github, ponieważ code.google.com został wycofany)

paping -p 80 google.com
kxmp
źródło
8
Pomocne byłoby wyjaśnienie tego, co robi ten program.
David Schwartz
16
dla każdego, kto znajdzie tę odpowiedź, tak jak ja, tylko po to, aby znaleźć paping, nie ma w żadnych repozytoriach i jest starożytnym kodem, który nawet nie skompiluje się na ARM - przewiń w dół do odpowiedzi „hping”. Jest to idealne narzędzie do pingowania, gdy trzeba przetestować port, i jest łatwo dostępne w różnych repozytoriach (np. Ubuntu, Arch), w tym ARM.
Mark
Jak mogę zainstalować paping? Odwiedziłem repozytorium, ale nie ma żadnych wydań. Ach, nieważne .. kod Google nie był wówczas dla mnie dostępny.
Shayan
310

Porty są koncepcją UDP i TCP . Komunikaty ping są technicznie nazywane żądaniem echa ICMP i odpowiedzią echa ICMP, które są częścią ICMP . ICMP, TCP i UDP są „rodzeństwem”; nie są oparte na sobie, ale są trzema oddzielnymi protokołami działającymi na IP.

Dlatego nie możesz pingportu. Co można zrobić, to użyć skanera portów podobnego nmap.

nmap -p 80 onofri.org

Możesz także użyć telnet onofri.org 80, jak sugeruje jedna z pozostałych odpowiedzi (Daje błąd, jeśli port jest zamknięty lub przefiltrowany).

BenjiWiebe
źródło
22
+1 rozumiesz to dobrze. ICMP jest zbudowany na bazie IP, która ma pojęcie adresów IP, ale nie portów. TCP i UDP są również na szczycie IP i to te protokoły dodają „porty”. Wszystkie protokoły ICMP, TCP i UDP znajdują się na tym samym „poziomie” pod względem protokołu, przez który są przenoszone.
Jason C
14
+1. Wiele osób myśli, że jeśli nie mogą pingować czegoś, nie mogą się z nim połączyć ... ale, jak mówisz, ICMP różni się od TCP i UDP: jeśli zamierzasz wyświetlać, powiedzmy, stronę internetową na TCP 80, niż trzeba tylko otwierać TCP 80 na zaporze ogniowej, nic więcej (więc Ping do tego samego adresu IP może (... powinien!) zostać zablokowany, na przykład)
Olivier Dulac
6
Aby zachować dokładność informacji, ICMP nie jest protokołem warstwy transportowej, takim jak TCP lub UDP. Podobnie jak wiele protokołów, nie do końca pasuje do modeli koncepcyjnych sieci, ale jest ogólnie uważany za protokół warstwy sieci / sieci, podobnie jak IP. Czasami nazywany jest także protokołem L3.5.
YLearn
2
@BenjiWiebe, zgodził się, ale znowu, dla dokładności należy złożyć oświadczenie, dlatego go dodałem. Do tej pory mówi się tylko, że ICMP, TCP i UDP są powiązane. Najwyżej głosowany komentarz posunął się nawet do stwierdzenia, że ​​wszystkie są na tym samym „poziomie”. Chociaż nie ma to znaczenia dla przeciętnego użytkownika, istnieje wiele nietypowych użytkowników, którzy odwiedzają tę witrynę.
YLearn
4
@OlivierDulac Nie wiem, czy powinieneś to zablokować. Większość znanych mi serwerów pozostawia to otwarte. ICMP sprawia, że ​​Internet się kręci. Dlaczego miałbyś chcieć, aby ludzie myśleli, że nie mogą się z tobą skontaktować, jeśli mogą?
Cruncher
86

Korzystam z Telnetu , ponieważ jest wbudowany w wiele platform bez dodatkowych pobrań.

Wystarczy użyć polecenia telnet, aby połączyć się z portem, który chcesz przetestować. Jeśli pojawi się komunikat poniżej lub komunikat z samej usługi, oznacza to, że port jest aktywny.

Minty16 ~ $ telnet localhost 139
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Jeśli znasz sekwencję poleceń dla usługi, z którą się łączysz, możesz wpisać polecenie ( na przykład HTTP / FTP GET ) i obserwować odpowiedź i dane wyjściowe w terminalu. Jest to bardzo przydatne do testowania samej usługi, ponieważ pokazuje informacje o błędach wysyłane do klienta, takie jak błędy HTTP 500.

Jeśli pojawi się komunikat, że połączenie zostało odrzucone, port jest zamknięty.

Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Frank Thomas
źródło
8
Również jeśli ekran stanie się całkowicie czarny, oznacza to również, że jesteś podłączony.
Tensigh,
Doskonała sugestia. Użyłem tego do przetestowania, czy serwer WWW działał, gdy przeglądarka internetowa nie była łatwą opcją.
Brandon
@Bandon, jak podczas sshing do maszyn deweloperskich ^. ^
Cruncher
Narzędzia dla programistów w przeglądarkach są znacznie łatwiejsze, ponieważ nadal wysyłają wszystkie właściwe nagłówki żądań HTTP, ale można sprawdzić pełną odpowiedź HTTP. Z drugiej strony, jeśli chcesz dostosować żądanie również, telnet jest właściwym rozwiązaniem.
Wyścigi lekkości na orbicie
Myślę, że wszystkie odpowiedzi tutaj brakuje najważniejszej informacji. Czy z technicznego punktu widzenia nie można „pingować” portu w następujący sposób? Możesz nawiązać połączenie TCP / UDP i policzyć, ile milisekund zajęło nawiązanie tego połączenia.
David
47

Tak, skorzystaj z HPing, aby to zrobić:

$ sudo hping -S -p 80 google.com
HPING google.com (p5p1 77.237.27.37): S set, 40 headers + 0 data bytes
len=46 ip=77.237.27.37 ttl=58 id=25706 sport=80 flags=SA seq=0 win=29200 rtt=7.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25707 sport=80 flags=SA seq=1 win=29200 rtt=7.4 ms
len=46 ip=77.237.27.37 ttl=58 id=25708 sport=80 flags=SA seq=2 win=29200 rtt=8.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25709 sport=80 flags=SA seq=3 win=29200 rtt=7.8 ms
^C
--- google.com hping statistic ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 7.4/7.8/8.5 ms

Zauważ, że potrzebuje uprawnień roota (lub możliwości SELinuksa) do tworzenia surowych pakietów IP, podobnie jak ping (który najprawdopodobniej jest suid w twoim systemie).

d33tah
źródło
3
Chciałbym, żeby to była „zaakceptowana odpowiedź”. hping można było łatwo znaleźć w wielu repozytoriach, w przeciwieństwie do paping, który jest pradawnym złośliwym kodem, który nie kompiluje się na ARM. Również w przeciwieństwie do NMAP, haping zwraca kod statusu, który jest łatwo testowalny ze skryptu powłoki, więc jest to idealny zamiennik dla tego, gdzie w innym przypadku używałbyś ping. Dzięki za tę odpowiedź, szkoda, że ​​nie przewinąłem wystarczająco daleko, aby ją zobaczyć, a zamiast tego musiałem ją znaleźć na innej stronie internetowej.
Mark
Nie mogę zainstalować hping w Ubuntu .. Nie znaleziono pakietu .. Ale znalazłem. hping3Czy to to samo, co hping3? @ d33tah
Shayan
Ok próbowałem hping3i pinguje wszystkie porty .. Nie ma znaczenia, czy jest zamknięty czy otwarty .. Jak mogę sprawdzić, czy port jest zamknięty czy otwarty?
Shayan
46

Możesz użyć netcat, aby połączyć się z określonym portem i sprawdzić, czy uzyskasz połączenie. Flaga -v zwiększy szczegółowość, aby pokazać, czy port jest otwarty, czy zamknięty. Flaga -z spowoduje zamknięcie programu netcat po nawiązaniu połączenia. Możesz następnie użyć kodów wyjścia za pomocą $? aby sprawdzić, czy połączenie zostało ustanowione, czy nie.

$ nc -zv localhost 22
localhost [127.0.0.1] 22 (ssh) open
$ echo $?
0
$ nc -zv localhost 23
localhost [127.0.0.1] 23 (telnet) : Connection refused
$ echo $?
1

Dodatkowo możesz użyć mtr z flagą -T dla tcp i flagą -P, aby określić port. To zrobi coś podobnego do traceroute przez TCP zamiast tylko ICMP. Może to być jednak przesada.

westchnienie muszę edytować, aby dodać ten bit, ponieważ nie możemy wstawić kodu w komentarzach. Knoppix może robić coś innego ze swoją wersją netcata, ale właśnie to wyciągam z Linux Mint

$ date;nc -z -w 1 www.google.com 8000;date
Fri Jun 20 15:55:26 PDT 2014
Fri Jun 20 15:55:27 PDT 2014
$ date;nc -z -w 4 www.google.com 8000;date
Fri Jun 20 15:55:33 PDT 2014
Fri Jun 20 15:55:37 PDT 2014

$ nc -h
[v1.10-40]
Falsenames
źródło
Problem polega na tym, że jeśli spróbujesz nc -z www.google.com 8000 , może to potrwać długo - plus 5 sekund. Jeśli to zrobię -w 1, zajmuje to 5 sekund. Jeśli to zrobię -w 3, zajmuje to 3 razy dłużej. 15 błysków kursora, 15 sekund. -w 1ma być sekunda, ale przetestowany na cygwinie.,. 5 sekund. Jest super szybki, gdy na porcie jest serwer, ale trochę wolniejszy, gdy go nie ma.
barlop
przeklinaj brak nowych linii w komentarzach ... To wydaje się być błędem w cygwin. Testowanie z linux Mint pokazuje opóźnienie o ile podano wiele sekund. uruchomiłem to w celu przetestowania: data; nc-zw5 www.google.com 8000; data
Falsenames
Poprosiłem również @BenjiWiebe o żądania nmap. nc łatwiej jest umieścić w skrypcie, ale O wiele łatwiej jest używać nmap wizualnie.
Falsenames,
Wypróbowanie w knoppixie. nc -zv -w 1 www.google.com Jak sprawić, by spróbowała tylko raz? Kiedy próbuję, tak, -w 1 działa, ale co sekundę ponawia próbę, dopóki nie zrobię Ctrl-C.
barlop
Nie jestem pewien, co robi wersja Knoppix „nc -zv -w 1 www.google.com 80”. Działa to dobrze w moim systemie, wysyłanie zapytań raz i upuszczanie tak jak -z powinno. Ponadto, bez określonego numeru portu, mój nie powiedzie się, mówiąc, że nie ma określonego portu.
Falsenames,
18

Możesz także użyć nping(część nmap):

$ nping -p 80 localhost

Starting Nping 0.6.00 ( http://nmap.org/nping ) at 2014-06-23 11:57 CEST
SENT (0.0015s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (0.0016s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (1.0027s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (1.0027s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (2.0038s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (2.0039s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (3.0050s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (3.0050s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (4.0061s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (4.0062s) Handshake with localhost:80 (127.0.0.1:80) completed

Max rtt: 0.032ms | Min rtt: 0.008ms | Avg rtt: 0.012ms
TCP connection attempts: 5 | Successful connections: 5 | Failed: 0 (0.00%)
Tx time: 4.00575s | Tx bytes/s: 99.86 | Tx pkts/s: 1.25
Rx time: 4.00575s | Rx bytes/s: 49.93 | Rx pkts/s: 1.25
Nping done: 1 IP address pinged in 4.01 seconds
nyuszika7h
źródło
6
nping --tcp -p 80 localhost
K-Gun
Testuję KAŻDY port (porty, które nie są otwarte) i wciąż otrzymuję dwa razy uścisk dłoni ...
Shayan
8

Możesz to zrobić w powłoce, używając Pythona jako niezbyt krótkiej linijki:

$ portping() { python <<<"import socket; socket.setdefaulttimeout(1); socket.socket().connect(('$1', $2))" 2> /dev/null && echo OPEN || echo CLOSED; }
$ portping 8.8.8.8 54
CLOSED
$ portping 8.8.8.8 53
OPEN
AX-Labs
źródło
7

Tylko w celach informacyjnych chciałem udostępnić post przez Vivek Gite: https://www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-using-linux-unix/# komentarz-920398

Wymienia różne sposoby, z których niektóre zostały już tutaj opublikowane. Ale najbardziej zaskakujące dla mnie było tylko bash:

(echo >/dev/tcp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/udp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/tcp/www.cyberciti.biz/22) &>/dev/null && echo "Opened 22" || echo "Closed 22"
(echo >/dev/tcp/www.cyberciti.biz/443) &>/dev/null && echo "Opened 443" || echo "Closed 443"

Lub bardzo prosta wersja: wystarczy spojrzeć na wynik następującego wzorca poleceń:

echo >/dev/{tcp|udp}/{host}/{port}

Przydatne podczas pracy z losowymi kontenerami dokerów.

Jacek
źródło
looking at the output- $?pomocne może być tylko sprawdzenie kodu powrotu . Także to wisi na zamkniętych portów, może być jakiś limit czasu mogą być konfigurowane w dowolnym miejscu ...
vp_arth
To rozwiązanie wygląda schludnie, ale echo >/dev/tcp/{hostname}/{portnumber}nie kończy się po zamknięciu portu. I echo >/dev/tcp/{hostname}/{portnumber}nic nie pokazuje, mimo że port jest otwarty i widzę go w przeglądarce.
miguelmorin
Cześć mmorin, jakiego systemu operacyjnego używasz? W Ubuntu zachowuje się zgodnie z oczekiwaniami: jeśli port jest zamknięty, dostaję Connection refused. W przeciwnym razie wyjdzie, pokazując nic i echo $?pokazując kod wyjścia1
Jacek
3

Dodaję watchtutaj narzędzie:

watch nmap -p22,80 google.com

Every 2,0s: nmap -p22,80 google.com   Mon Jun 15 16:46:33 2015

Starting Nmap 6.40 ( http://nmap.org ) at 2015-06-15 16:46 NOVT
Nmap scan report for google.com (127.0.0.1)
Host is up (0.0012s latency).
rDNS record for 127.0.0.1: google.com
PORT     STATE  SERVICE
22/tcp open   ssh
80/tcp closed http

Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds
vp_arth
źródło
3

To jest proste z nmap

przykłady:

#sintaxis
nmap -p [port] hostName
#first is command, after scan ports, type port - port or range ports, and ip or name of website...

## Scan port 80
nmap -p 80 onofri.org

## Scan TCP port 80
nmap -p T:80 onofri.org

## Scan UDP port 53
nmap -p U:53 onofri.org

## Scan two ports ##
nmap -p 80,443 onofri.org

## Scan port ranges ##
nmap -p 80-200 onofri.org

## Combine all options ##
nmap -p U:53,111,137,T:21-25,80,139,8080 onofri.org
nmap -p U:53,111,137,T:21-25,80,139,8080 server1.cyberciti.biz
nmap -v -sU -sT -p U:53,111,137,T:21-25,80,139,8080 onofri.org

## Scan all ports with * wildcard ##
nmap -p "*" 192.168.1.1

## Scan top ports i.e. scan $number most common ports ##
nmap --top-ports 5 onofri.org
nmap --top-ports 10 onofri.org

Aby uzyskać więcej informacji, zobacz to:

wpisz w linii poleceń to: man nmap

http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/ http://www.tecmint.com/nmap-command-examples/

DarckBlezzer
źródło
1

Próbujesz przetestować komunikację lub uzyskać odpowiedź z portu 80 w tym węźle? PINGspróbuje nawiązać komunikację z określonym hostem za pośrednictwem ICMP, który nie ma nic wspólnego z portami.

Zamiast tego spróbuj http://nmap.org/, aby sprawdzić informacje o porcie i przetestować komunikację:

nmap -v -p 80 onofri.org
Quijote Shin
źródło
1
Nie jestem pewien, której wersji nmap używasz. W moim systemie wymaga oddzielenia -v i -p jak „nmap -v -p 80 onofri.org”. Wynika to z tego, że -v i -vv oznaczają różne rzeczy, -v przyjmując więcej v jako argument.
Falsenames,