Artykuł Serwery

Jak sprawdzic, czy port jest otwarty, za pomoca telnet

Aby sprawdzić, czy port jest otwarty, wpisz telnet <host> <port>, na przykład telnet example.com 443. Pusty czarny ekran albo napis Connected oznacza port otwarty. Connection refused lub Could not open connection to port zamknięty albo blokowany przez zaporę. Z sesji wyjdziesz przez Ctrl+], a potem quit.

Co robi telnet i dlaczego nadaje sie do testu portu

W skrócie: telnet otwiera surowe połączenie TCP do pary host i port. Nie szyfruje ruchu, nie tuneluje, nie uwierzytelnia - po prostu puka do drzwi i sprawdza, czy druga strona przyjmuje połączenie na wskazanym porcie. To dlatego jest tak wygodny do diagnostyki: jeden wiersz komendy odpowiada na pytanie, czy ten port w ogóle żyje z mojej maszyny.

Konkret: trzeba rozdzielić dwie role telnetu, bo tu rodzi się większość nieporozumień. Telnet jako protokół zdalnego logowania powstał w latach 70. XX wieku i działał na domyślnym porcie 23 (dane z dokumentacji protokołu). W tej roli jest dziś przestarzały i niebezpieczny, bo cały ruch, łącznie z hasłem, leci otwartym tekstem - dlatego do administracji serwerów używa się protokołu SSH.

  1. Wyjdź z sesji: naciśnij Ctrl+], a następnie wpisz quit (skrót q też zadziała).

Sprawdź najpierw, czy masz klienta. Na nowych dystrybucjach - Debian, Ubuntu, RHEL czy Fedora - telnet często nie jest preinstalowany. Doinstalujesz go jedną komendą:

sudo apt install telnet     # Debian / Ubuntu
sudo dnf install telnet     # Fedora / RHEL

Windows

W Windows 10 i Windows 11 klient telnet jest domyślnie wyłączony (dane producenta), więc telnet w cmd zwróci błąd, dopóki go nie włączysz. Są dwie drogi:

  • Przez interfejs: Panel sterowania, dalej Programy, potem "Włącz lub wyłącz funkcje systemu Windows", zaznacz "Klient Telnet" i zatwierdź.
  • Przez wiersz poleceń (uruchomiony jako administrator): dism /online /Enable-Feature /FeatureName:TelnetClient

Po aktywacji używasz telnetu tak samo w cmd i w PowerShell, na przykład telnet smtp.example.com 25.

Typowe porty do testu

Numer portu podajesz ręcznie, więc telnetem sprawdzisz dowolny - od domyślnego 23 po aplikacyjny 8080. Oto porty, które admin diagnozuje najczęściej:

Port Usługa Przykładowa komenda
22 SSH telnet 10.0.0.5 22
25 / 587 SMTP (poczta) telnet mail.example.com 25
80 HTTP telnet example.com 80
443 HTTPS telnet example.com 443
3306 MySQL telnet db.example.com 3306
5432 PostgreSQL telnet db.example.com 5432
23 Telnet (domyślny) telnet host 23

Pro tip admina: gdy port 80 odpowie pustym ekranem, możesz wpisać GET / HTTP/1.0, dwa razy Enter i zobaczysz surową odpowiedź serwera HTTP. To ten sam trik, którym ręcznie testuje się też SMTP i POP3 - telnet pozwala rozmawiać z usługą tekstowo, komenda po komendzie.

Jak czytac wynik - interpretacja komunikatow

To jest sedno troubleshootingu. Telnet mówi mało, ale każdy komunikat niesie konkretną diagnozę. Oto tabela: co widzisz, co to znaczy, co zrobić.

Co widzisz Co to znaczy Co zrobić
Pusty czarny ekran, kursor miga Połączenie nawiązane, port OTWARTY, usługa czeka na dane Nic nie trzeba - port działa. Dla HTTP możesz wpisać GET / HTTP/1.0
"Connected to ..." Port otwarty, usługa odpowiedziała Port działa, problem leży gdzie indziej
"Connection refused" Host jest osiągalny, ale nikt nie nasłuchuje na porcie albo zapora odrzuca (REJECT) Sprawdź, czy usługa działa i czy słucha na tym porcie
"Connection timed out" lub długie wiszenie Pakiet ginie po drodze - zwykle zapora DROP, zły adres albo host nieosiągalny Sprawdź adres IP, trasę i reguły zapory
"Could not open connection to the host" (Windows) Port zamknięty albo blokowany To samo co refused / timeout - patrz wyżej
"telnet: command not found" Klient nie jest zainstalowany Doinstaluj klienta (sekcja krok po kroku)

Kluczowa jest różnica między Connection refused a Connection timed out. Refused to natychmiastowa, szczera odmowa - druga strona odpowiedziała, że na tym porcie nikogo nie ma, czyli albo usługa padła, albo zapora aktywnie odrzuca (REJECT). Timeout to cisza - pakiet wpadł w czarną dziurę, najczęściej przez regułę zapory DROP, która po prostu wyrzuca pakiet bez odpowiedzi. Refused diagnozuje się w sekundy, timeout wymaga sprawdzenia trasy i zapory.

Czeste bledy i pulapki

Krok po kroku po najczęstszych wpadkach, które widuję przy diagnostyce portów:

  • Mylenie portu domyślnego z portem testowanym. Port 23 to domyślny port protokołu telnet, ale klient telnet testuje ten port, który podasz jako drugi argument. telnet host 3306 sprawdza MySQL, nie telnet. Numer 23 nie jest żaden magiczny - to tylko wartość domyślna, gdy portu nie podasz wcale.
  • Próba testu UDP. DNS na porcie 53 czy część usług VPN działają po UDP. Telnet tego nie obsługuje i wynik wprowadzi cię w błąd. Do UDP użyj nc -zuv albo nmap -sU.
  • Błędna diagnoza Connection refused. Łatwo uznać to za problem sieci, a to zwykle znak, że usługa padła lokalnie albo nie wystartowała na tym porcie. Zanim obwinisz sieć, sprawdź na serwerze ss -tlnp i zobacz, czy proces faktycznie nasłuchuje. Ten sam błąd w kontekście logowania rozbieram w tekście o błędzie connection refused przy SSH.
  • Test z niewłaściwej maszyny. Port bywa otwarty lokalnie na serwerze, ale zablokowany z zewnątrz. Jeśli telnet localhost 3306 na serwerze działa, a z twojego laptopa nie - blokada siedzi po drodze: zapora hosta, security group u dostawcy VPS albo filtr ISP. Testuj z tego miejsca, z którego naprawdę łączy się klient.
  • Uwięzienie w sesji. Klasyk: telnet się połączył, ekran zamarł i nie wiadomo, jak wyjść. Zapamiętaj Ctrl+], a potem quit.
  • Logowanie przez telnet do realnej usługi. Nigdy tego nie rób. Hasło leci otwartym tekstem i każdy po drodze je odczyta. Telnet to narzędzie diagnostyczne, do zdalnej administracji służy SSH. Używany jest tylko wtedy, gdy nie podasz numeru portu w komendzie. W praktyce diagnostycznej numer portu zawsze podajesz ręcznie jako drugi argument, więc telnetem sprawdzisz dowolny port, nie tylko 23. To najczęstsze źródło nieporozumień u osób, które dopiero zaczynają z tym narzędziem.

Jak wyjsc z telnet, gdy ekran sie zawiesil?

Naciśnij Ctrl+] (klawisz Ctrl razem z prawym nawiasem kwadratowym). Wrócisz do znaku zachęty telnetu, gdzie wpisujesz quit i naciskasz Enter. To wychodzi z sesji i zamyka połączenie. Skrót q działa tak samo jak quit. Zapamiętanie tej kombinacji oszczędza zamykania całego okna terminala.

Czy telnetem sprawdze port UDP?

Nie, telnet działa wyłącznie po TCP i portu UDP nim nie sprawdzisz. Próba testu na przykład DNS na porcie 53 da mylący wynik. Do UDP użyj nc -zuv <host> <port> albo nmap -sU -p <port> <host> - oba obsługują protokół UDP poprawnie i pokażą realny stan portu, a nie fałszywy alarm.

Dlaczego widze "Connection refused", mimo ze serwer dziala?

To znaczy, że host jest osiągalny, ale na wskazanym porcie nikt nie nasłuchuje albo zapora aktywnie odrzuca połączenie. Najczęściej usługa nie wystartowała na tym porcie. Sprawdź na serwerze ss -tlnp, czy proces faktycznie nasłuchuje, oraz reguły zapory. Refused to odpowiedź hosta, nie cisza sieci - problem jest lokalny, nie w trasie.

Telnet czy SSH - czym sie roznia?

Telnet i SSH łączą się ze zdalnym hostem, ale telnet przesyła wszystko otwartym tekstem, a SSH szyfruje całą sesję. Telnet zostaw do diagnostyki portów, a do zdalnej administracji serwera zawsze wybieraj SSH. Więcej w przewodniku o protokole SSH - to standard, który zastąpił telnet w logowaniu do serwerów.