Czy zastanawiasz się, jak efektywnie przetestować połączenie między dwoma elementami w sieci?
Dla administratorów systemów, weryfikacja łączności to codzienna praktyka, często potrzebna przy diagnozowaniu problemów sieciowych. Może to obejmować sytuacje, gdy aplikacja nie może nawiązać połączenia z serwerem baz danych, nie jest w stanie pobrać danych z zewnętrznego adresu URL, lub gdy trzeba zweryfikować, czy przepływ danych jest prawidłowy.
Niezależnie od konkretnego problemu, poniższe narzędzia i komendy mogą okazać się nieocenione. Zostały one przetestowane na systemie CentOS, ale nie ma przeciwwskazań, aby nie działały poprawnie również na innych dystrybucjach Linuksa.
Przejdźmy zatem do szczegółów…
telnet
To jedno z popularniejszych narzędzi do sprawdzania komunikacji między serwerami, czy serwera z adresem IP innego urządzenia w sieci. Jego składnia jest bardzo intuicyjna.
telnet $adresIP_docelowy $NUMER_PORTU
Załóżmy, że chcemy sprawdzić, czy jesteśmy w stanie nawiązać połączenie z portem 8080 na adresie IP 10.0.0.1. Wtedy komenda wyglądałaby tak:
telnet 10.0.0.1 8080
Jeżeli połączenie zostanie ustanowione, powinniśmy zobaczyć komunikat informujący o sukcesie.
Trying 10.0.0.1... Connected to 10.0.0.1. Escape character is '^]'.
Uwaga: Jeżeli podczas próby użycia polecenia telnet pojawi się komunikat o braku polecenia, oznacza to, że musisz je zainstalować, co zostało opisane w innym miejscu.
W większości przypadków telnet będzie wystarczający. Jeśli jednak szukasz alternatyw, poniżej znajdziesz kilka z nich.
nc lub ncat
Ncat (znane również jako nc) to zaawansowane narzędzie sieciowe o szerokich możliwościach. Pozwala m.in. na ustanawianie i akceptowanie połączeń, zdalne wykonywanie komend, zapisywanie i odczytywanie danych. Jest kompatybilne zarówno z IPv4, jak i IPv6.
Aby przeprowadzić prosty test, który sprawdzi, czy port jest otwarty, użyj następującego polecenia:
nc -vz $NAZWA_HOSTA $NUMER_PORTU
Przykładowo, chcąc przetestować port 443 na domenie newsblog.pl.com, komenda będzie wyglądać tak:
[[email protected] ~]# nc -vz newsblog.pl.com 443 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Connected to 104.25.133.107:443. Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds. [[email protected] ~]#
Jak już wspomniano, nc pozwala również na powiązanie połączenia z konkretnym portem, umożliwiając nasłuchiwanie. Jest to przydatne w sytuacjach, gdy nie masz uruchomionej żadnej usługi, ale chcesz potwierdzić istnienie połączenia.
Aby rozpocząć nasłuchiwanie na danym porcie, użyj:
nc -l $NUMER_PORTU
Spowoduje to powiązanie portu z podanym numerem.
Jeśli ncat nie jest zainstalowany, możesz go dodać za pomocą komendy `yum install nc` w systemach CentOS/RHEL.
wget
wget to praktyczne polecenie do pobierania plików oraz testowania połączeń HTTP, HTTPS i FTP. Jeśli jesteś inżynierem sieciowym lub często zajmujesz się rozwiązywaniem problemów sieciowych, wget będzie Twoim sprzymierzeńcem. Używanie go do testów jest bardzo proste.
wget $ADRES_URL
Oto przykład testowania połączenia z tools.newsblog.pl.com
[[email protected] ~]# wget tools.newsblog.pl.com --2019-05-09 20:40:01-- http://tools.newsblog.pl.com/ Resolving tools.newsblog.pl.com (tools.newsblog.pl.com)... 104.25.134.107, 104.25.133.107, 2606:4700:20::6819:866b, ... Connecting to tools.newsblog.pl.com (tools.newsblog.pl.com)|104.25.134.107|:80... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: https://tools.newsblog.pl.com/ [following] --2019-05-09 20:40:01-- https://tools.newsblog.pl.com/ Connecting to tools.newsblog.pl.com (tools.newsblog.pl.com)|104.25.134.107|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: 'index.html.2' [ <=> ] 15,139 --.-K/s in 0.001s 2019-05-09 20:40:02 (12.8 MB/s) - 'index.html.2' saved [15139] [[email protected] ~]#
Jeśli w odpowiedzi widzimy informację o nawiązaniu połączenia, oznacza to, że nie ma problemu z łącznością.
Zachęcamy do przejrzenia bardziej rozbudowanych przykładów użycia polecenia wget.
curl
curl to wszechstronne narzędzie, które oferuje wiele funkcji.
Czy wiedziałeś, że za pomocą curl można sprawdzić połączenie telefoniczne z portem?
Teraz już wiesz.
curl -v telnet://$ADRES_IP:$NUMER_PORTU
Poniżej znajduje się przykład w działaniu:
[[email protected] ~]# curl -v telnet://chandan.io:443 * About to connect() to chandan.io port 443 (#0) * Trying 104.31.68.106... * Connected to chandan.io (104.31.68.106) port 443 (#0)
W przypadku, gdy nie ma problemów z nasłuchiwaniem na porcie lub zaporą ogniową, zobaczysz podobny wynik, gdy próba połączenia się powiedzie.
[[email protected] ~]# curl -v telnet://chandan.io:4434 * About to connect() to chandan.io port 4434 (#0) * Trying 104.31.68.106...
curl można również wykorzystać do pobierania danych. Obsługuje on szereg protokołów, m.in.: HTTP, HTTPS, FTP, IMAP, LDAP, POP3, SCP, SFTP, GOPHER i inne.
nmap
To popularne narzędzie oferuje setki funkcji. Często jest postrzegane jako narzędzie bezpieczeństwa. nmap pozwala na testowanie pojedynczych adresów IP/portów lub całych zakresów.
Aby przetestować pojedynczy port, użyj:
nmap -p $NUMER_PORTU $ADRES_IP
Oto przykład testowania portu 443 na stronie siterelic.com
[[email protected] ~]# nmap -p 443 siterelic.com Starting Nmap 7.70 ( https://nmap.org ) at 2019-05-10 06:55 UTC Nmap scan report for siterelic.com (104.27.174.50) Host is up (0.0079s latency). Other addresses for siterelic.com (not scanned): 104.27.175.50 2606:4700:30::681b:ae32 2606:4700:30::681b:af32 PORT STATE SERVICE 443/tcp open https Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds [[email protected] ~]#
Zwróć uwagę na kolumnę „STATE”. Jeżeli widzimy „open”, oznacza to, że połączenie jest aktywne. Natomiast „filtered” sygnalizuje brak połączenia.
ping
To popularne narzędzie służy do weryfikacji, czy zdalny host odpowiada na zapytania ICMP ECHO_REQUEST. Warto mieć na uwadze, że wyniki mogą być niedokładne, gdy protokół ICMP jest blokowany przez zaporę sieciową. Zakładając, że nie jest, można użyć polecenia ping, aby wysłać zapytanie do punktu końcowego IPv4 lub IPv6, jak poniżej:
ping $adres_ip ping $adres_url
Przykładowy wynik pozytywny dla newsblog.pl.com:
[email protected] ~ % ping newsblog.pl.com PING newsblog.pl.com (104.27.119.115): 56 data bytes 64 bytes from 104.27.119.115: icmp_seq=0 ttl=53 time=7.944 ms 64 bytes from 104.27.119.115: icmp_seq=1 ttl=53 time=8.870 ms
Przykładowy wynik negatywny dla wewnętrznego adresu IP:
[email protected] ~ % ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1
Jeżeli punkt końcowy wspiera protokół IPv6, można użyć polecenia ping6 w następujący sposób:
[email protected] ~ % ping6 newsblog.pl.com PING6(56=40+8+8 bytes) 2a01:4b00:88e4:8700:d8ca:bf50:159c:2a1d --> 2606:4700:20::681b:7673 16 bytes from 2606:4700:20::681b:7673, icmp_seq=0 hlim=250 time=8.650 ms 16 bytes from 2606:4700:20::681b:7673, icmp_seq=1 hlim=250 time=8.738 ms
W celu wykonania zdalnego testu ping przez Internet, można skorzystać z dostępnych online narzędzi ping.
Podsumowanie
W nowszych wersjach Linuksa telnet jest coraz częściej zastępowany innymi rozwiązaniami. W artykule przedstawiono alternatywne metody testowania połączeń.
Jeżeli dopiero zaczynasz swoją przygodę z Linuksem, zachęcamy do zapoznania się z kursem Udemy.