Wprowadzenie
Jedną z największych zalet korzystania z Linux jest mnóstwo pomocnych narzędzi, które dostarcza. Funkcje wbudowane w programy są zazwyczaj wystarczające dla większości programistów do wykonywania ich pracy. Oznacza to, że przez większość czasu nie będziesz musiał pobierać zewnętrznych programów i oprogramowania. Wbudowane narzędzia zapewnią Ci wystarczającą użyteczność. Wśród tych pomocnych funkcji znajduje się narzędzie netcat.
Jeśli chodzi o świat narzędzi sieciowych, netcat jest czymś w rodzaju niezwykle potężnej broni. Jest to niesamowicie wszechstronne polecenie, którego można używać do wielu celów. Na przykład, możesz użyć tego jednego narzędzia do monitorowania, testowania, a także przesyłania wszelkiego rodzaju plików i danych przez połączenia systemowe. W tym poradniku przyjrzymy się, jak wykonać wszystkie te czynności na VPS przy użyciu netcat.
Znajdowanie Netcat
Netcat jest zazwyczaj dostępny we wszystkich nowoczesnych dystrybucjach Linuksa. Oznacza to, że najprawdopodobniej już go masz i nie musisz specjalnie go instalować. W naszym samouczku będziemy korzystać z VPS z systemem Ubuntu 12.04. Możesz zainstalować własny serwer Ubuntu, postępując zgodnie z naszym samouczkiem. Ubuntu zazwyczaj zawiera wariant BSD narzędzia netcat. Pamiętaj, że jeśli masz inną wersję, może ona działać nieco inaczej.
Omówienie podstawowej składni
Zaczynamy od zapoznania się z ogólną składnią, która działa w narzędziu netcat. Możesz obsługiwać netcat, uruchamiając połączenie TCP. Połączenie musi zostać zainicjowane z hostem zdalnym. Oto podstawowa składnia dla netcat:
|
1 |
netcat [opcje] host port |
To polecenie spróbuje nawiązać połączenie TCP ze zdalnym hostem. To, z którym hostem się połączy, zależy od numeru portu określonego w poleceniu. Połączenie będzie nieszyfrowane. Jak widać, to polecenie działa podobnie do sposobu działania polecenia telnet.
Z drugiej strony, możesz również zainicjować połączenie UDP. Aby wysłać pakiet UDP zamiast TCP, musisz użyć opcji -u. Wyglądałoby to tak:
|
1 |
netcat -u host port |
Jeśli chcesz, możesz również określić zakres portów. Aby to zrobić, musisz wstawić myślnik między pierwszym a ostatnim portem. Oto przykład:
|
1 |
netcat host port_początkowy-port_końcowy |
Możesz do tego dodać również więcej flag. Inną rzeczą, na którą warto zwrócić uwagę, jest to, że możesz używać netcat i nc zamiennie. Uruchomią one to samo polecenie, co oznacza, że są swoimi aliasami.
Używanie Netcat do skanowania portów
Na początek przyjrzyjmy się jednemu z najczęstszych zastosowań netcat. Dowiemy się, jak używać go jako skanera portów. W większości sytuacji lepiej jest użyć narzędzia takiego jak nmap. Jeśli jednak potrzebujesz tylko wykonać proste skanowanie portów, netcat jest przydatny. Może pomóc w łatwym zidentyfikowaniu otwartych portów.
Aby użyć netcat jako skanera portów, musisz podać zakres portów. Zrobisz to za pomocą opcji -z. W ten sposób system przeskanuje zakres portów zamiast próbować nawiązać połączenie. Załóżmy, że chcemy przeskanować porty od 1 do 1000:
|
1 |
netcat -z -v domain.com 1-1000 |
Oprócz polecenia -z użyliśmy również opcji -v. Ta druga pozwala nam uzyskać więcej informacji z polecenia. Pozwala nam na bycie bardziej „szczegółowym” (verbose).
W odpowiedzi otrzymasz dane wyjściowe wyglądające następująco:

Dane wyjściowe pokazują wiele informacji dla każdego poszczególnego portu. Znasz status połączenia każdego portu. Z drugiej strony, jeśli znasz adres IP, możesz go użyć zamiast nazwy domeny. To znacznie przyspiesza proces. Oto przykład:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 |
Użyliśmy flagi -n, aby wskazać, że system nie musi używać DNS do rozpoznawania adresu IP.
Zazwyczaj komunikaty zwrotne są wysyłane na standardowe wyjście błędów. Aby szybciej odfiltrować wyniki, możesz przekierować je na standardowe wyjście. Użyjemy do tego składni basha 2>&1. Następnie odfiltrujemy wyniki za pomocą grep. Zastosujmy to do naszego przykładu:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep powiodło się |
Wynik będzie wyglądał podobnie do tego:
![]()
Wynik pokazuje, że tylko port 22 jest otwarty dla połączeń w podanym zakresie. Port 22 jest tradycyjnym portem SSH.
Komunikacja przez Netcat: Jak to działa?
Następnie zobaczymy, jak można użyć programu netcat do wysyłania pakietów TCP i UDP. Co więcej, może on również odbierać pakiety na różnych portach. Dzięki tej możliwości można użyć dwóch instancji netcat do stworzenia relacji klient-serwer. Na początku określisz klienta i serwer. Po wstępnej konfiguracji oba klienty mogą wysyłać i odbierać pakiety w obu kierunkach.
Naturalnie, będziesz musiał skonfigurować netcat na jednym systemie, aby nasłuchiwał połączeń na jednym porcie. Aby to zrobić, musisz użyć parametru -l. Dzięki temu możesz wybrać żądany port w następujący sposób:
|
1 |
netcat -l 4444 |
Teraz protokół TCP na tej maszynie będzie nasłuchiwał połączeń na porcie 4444. Warto zauważyć, że jeśli jesteś użytkownikiem bez uprawnień roota lub zwykłym użytkownikiem, nie będziesz mieć dostępu do portów poniżej 1000.
Następnie musisz skonfigurować drugą maszynę, aby nawiązać połączenie. Użyjesz tego samego numeru portu i wskażesz konkretną nazwę domeny w ten sposób:
|
1 |
netcat domain.com 4444 |
Uruchomienie tego polecenia nie da żadnego wyniku. Spowoduje jednak nawiązanie połączenia. Oznacza to, że możesz zacząć wysyłać wiadomości z jednego serwera na drugi. Aby to zrobić, wystarczy wpisać wiadomość, a następnie nacisnąć klawisz ENTER. Wiadomość pojawi się na obu ekranach.
Po zakończeniu możesz zamknąć połączenie TCP, naciskając CTRL+D.
Czy można przesyłać pliki za pomocą Netcat?
Następnie pokażemy, jak przesyłać pliki za pomocą netcat. Za pomocą połączenia TCP można wysyłać wiadomości, a także inne rodzaje danych. Na początek musisz wybrać jedną maszynę, która będzie nasłuchiwać połączeń. Jednak zamiast wpisywać informacje w poleceniu, umieścimy je w pliku w ten sposób:
|
1 |
netcat -l 4444 > received_file |
Na drugiej maszynie będziesz musiał utworzyć nowy plik tekstowy. Oto polecenie, którego należy użyć:
|
1 |
echo "Witaj, to jest plik" > original_file |
Aby przesłać plik, użyjesz go jako wejścia dla połączenia na komputerze, który nasłuchuje:
|
1 |
netcat domain.com 4444 < original_file |
Na drugim komputerze pojawi się nowy plik o nazwie „received_file”. Będzie on zawierał wszystkie wpisane przez nas informacje:
|
1 |
cat received_file |
Możesz użyć tego narzędzia i przekształcić je w program do przesyłania plików. Załóżmy, że chcesz przesłać zawartość katalogu. Zrobimy to, tworząc nienazwane archiwum tar (tarball), które prześlemy do systemu i rozpakujemy w zdalnym katalogu. Na drugiej maszynie musimy przygotować się na odbiór pliku. Wiemy, że będziemy musieli go rozpakować i wyodrębnić. Aby to zrobić, wydaj następujące polecenie:
|
1 |
netcat -l 4444 | tar xzvf - |
Myślnik wskazuje, że program tar będzie działał na standardowym wejściu. Pochodzi ono z programu netcat na serwerze początkowym, gdy nawiązaliśmy początkowe połączenie.
Na koniec możemy umieścić zawartość całego katalogu w archiwum tar i wysłać ją przez netcat w ten sposób:
|
1 |
tar -czf - * | netcat domain.com 4444 |
Myślnik w poleceniu tar pokazuje, że nakazujemy systemowi spakowanie i skompresowanie zawartości katalogu. Instrukcja ta nakazuje również zapisanie wyniku na standardowe wyjście. Plik przejdzie przez połączenie TCP na drugi koniec. Serwer odbierający zdekompresuje go i zapisze w bieżącym zdalnym katalogu.
W ten sam sposób można przesyłać przez netcat również inne rodzaje danych. Wiele osób używa polecenia dd do tworzenia obrazów dysków i ich przesyłania. Aby poznać inny sposób przesyłania danych i plików, zapoznaj się z naszym poradnikiem pokazującym, jak zapewnić bezpieczeństwo podczas przesyłania plików za pomocą SFTP.
Używanie Netcat jako serwera WWW
Kolejną przydatną funkcją netcat jest możliwość użycia go do testowania swoich stron. Załóżmy, że używamy serwera do utworzenia pliku HTML takiego jak ten:
|
1 |
nano index.html |
Oto kod HTML, który zawiera ten plik:
|
1 2 3 4 5 6 7 8 9 10 |
<html> <head> <title>Strona testowa</title> </head> <body> <h1>Nagłówek poziomu 1</h1> <h2>Podnagłówek</h2> <p>Zwykły tekst tutaj</p> </body> </html> |
Wprowadź to do pliku, a następnie zapisz go i zamknij. Zazwyczaj domyślnym portem internetowym jest port 80. Jako zwykły użytkownik (nie-root) wybierzemy port 8888. Zakładając, że chcesz udostępnić i sprawdzić stronę tylko raz, użyj następującego polecenia:
|
1 |
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888 |
Aby wyświetlić zawartość pliku, przejdź do przeglądarki. Odwiedź następujący adres:
|
1 |
http://server_IP:8888 |
Zobaczysz stronę, którą zakodowałeś w pliku HTML:

Po pobraniu strony połączenie netcat zostanie zamknięte. Oznacza to, że odświeżenie strony spowoduje wyświetlenie błędu zamiast zawartości. Dzieje się tak, ponieważ skonfigurowaliśmy ją tak, aby była udostępniana tylko raz. Jeśli chcesz nadal odbierać połączenia, aby wyświetlać stronę w nieskończoność, użyjesz innego kodu:
|
1 |
while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done |
W tym przypadku umieściliśmy ostatnie polecenie w nieskończonej pętli. Jeśli chcesz zatrzymać pętlę, wystarczy nacisnąć CTRL-C. Teraz możesz nadal przeglądać swoją stronę i jej renderowanie nawet po zamknięciu pierwszego połączenia. Jest to jednak maksymalna funkcjonalność, jaką można uzyskać z używania narzędzia netcat jako serwera WWW. Nie próbuj używać go do obsługi rzeczywistych stron internetowych, ponieważ nie zapewnia ono żadnego bezpieczeństwa. Zamiast tego możesz zapoznać się z naszymi poradnikami dotyczącymi jak zainstalować oprogramowanie serwera WWW, takie jak Nginx lub Apache.
Podsumowanie
W tym poradniku omówiliśmy narzędzie netcat i zbadaliśmy jego wszechstronność jako narzędzia w systemie Ubuntu. Jak opisano w powyższych sekcjach, można go używać do komunikacji, przesyłania danych i udostępniania stron. Działa idealnie do szybkich interakcji między serwerami za pośrednictwem połączeń TCP/UDP. Jest to bardzo pomocna funkcja w przypadku wielu podstawowych funkcjonalności i diagnostyki.
Miłego korzystania z komputera!
Komentarze
Brak komentarzy. Bądź pierwszy.