6 Narzędzie Linux do testowania łączności sieciowej

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.