W tym samouczku omówimy bardzo potężne narzędzie sieciowe Netcat, powszechnie w skrócie nc. To narzędzie jest używane z wiersza poleceń, a jego składnia jest bardzo prosta. Umożliwi nam zapisywanie i odbieranie danych przez gniazda (TCP lub UDP). Posiada wiele funkcji i dlatego możemy z niego korzystać na wiele sposobów. Ważne jest, aby znać jego działanie, ponieważ pozwoli nam to na debugowanie, testowanie i badanie w sieci.
Netcat może pracować w 2 trybach:
KlientW tym trybie będzie odpowiedzialny za połączenie ze słuchaczem (który nasłuchuje pod określonym adresem i adresem IP, o którym będziemy musieli wiedzieć).
Serwer lub słuchaczCzekaj na połączenia od klientów na określonym porcie.
Idziemy do dowiedz się, jak działa Netcat lub nc na praktycznych przykładach, który jest najlepszym sposobem na naukę. Do tego użyję systemu operacyjnego Ubuntu 16.04.
Pierwszą rzeczą, którą zobaczymy, jest składnia netcata:
nc [opcje] [cel] [port]Netcat masz wiele opcji, zobaczmy kilka:
Niektóre opcje netcar
- -I: każe netcatowi słuchać.
- -P: Aby wskazać port pochodzenia.
- -s: Wskazuje adres źródłowy.
- -k: Aby umożliwić "nieskończone" połączenia słuchacz (używany z -l).
- -lub: Netcat otwiera port jako UDP zamiast TCP (co jest domyślnie).
- -v: Dzięki tej opcji pokaże nam informacje o połączeniu.
- -i: Wskazuje opóźnienie wysyłania i odbierania. (W sekundy).
- -4: Umożliwia programowi Netcat korzystanie tylko z protokołu IPv4.
- -6: Podobnie jak poprzednia, ale wymusza korzystanie z IPv6.
Istnieje więcej opcji, które możemy zobaczyć wykonując następujące polecenie:
nc -hPoniżej możesz zobaczyć na zdjęciu:
Zaczniemy od przykładów, najprostsze pójdzie najpierw, aby je skomplikować, ale tylko trochę, zobaczysz, że jest bardzo łatwy w użyciu.
Przykład 1
Ustaw mój komputer do nasłuchiwania na porcie 87:
sudo nc -l -p 87NotatkaTo działałoby tak samo przy usuwaniu -P.
Teraz nawiążemy połączenie z innego terminala, ponieważ uruchamiam go na tej samej maszynie, jako adresu używam localhost:
nc host lokalny 87Jeśli napiszemy coś od klienta, którego właśnie otworzyliśmy, zobaczymy to również w nasłuchującym terminalu, a tym samym zweryfikujemy, czy połączenie działa poprawnie. Ale jeśli napiszemy do słuchacza, pierwszy terminal, to również dociera do klienta. Następnie zostawiam obraz słuchacza i inny klienta:
Widzimy, że komunikują się tak, jak chcieliśmy w tym przykładzie, przejdźmy do innego.
Przykład 2
Możemy sprawić, aby serwer lub słuchacz zapisywał dane wysłane przez klienta w pliku, w tym celu polecenie do wykonania nie różni się zbytnio od tego widzianego w pierwszym przykładzie:
sudo nc -l 87> testNotatkatest to nazwa pliku, w którym zapiszesz nadchodzące informacje.
Po stronie klienta polecenie będzie takie samo jak poprzednio:
nc host lokalny 87Poniższy obraz pokazuje, co jest wykonywane na kliencie (słuchacz nasłuchuje przed połączeniem, w przeciwnym razie nie miałoby to żadnego efektu):
A po stronie serwera widać, że podobno nic nie jest odbierane, ale jedyną pewnością jest to, że nie wyświetla się na ekranie i jest zapisany w pliku testowym:
Przejdźmy do kolejnego przykładu.
Przykład 3
Sprawdzimy, czy zakres portów, aby wiedzieć, czy są otwarte, czy nie, w tym przykładzie zakres będzie wynosił 80-90. Najpierw otwieramy serwer na porcie 80, tak jak w pierwszym przykładzie (więc zobaczymy, jak działa, gdy jest otwarty, a kiedy nie):
sudo nc -l 87A na kliencie wykonamy:
nc -z -v host lokalny 80-90Parametr -z służy do skanowania, a -v Jak widzieliśmy wcześniej, aby pokazać informacje (jeśli tego nie umieścimy, to nie pokaże, który port jest otwarty, a który nie), to obraz klienta:
Zobaczymy przykład w UDP.
Przykład 4
Ten przykład jest również prosty, będziemy nasłuchiwać UDP na porcie 2016 i wymusimy, aby był to adres IPv4:
sudo nc -l -u -4 2016A teraz sprawiamy, że klient się połączy:
nc -u -4 2016Obrazka nie dostarczam, ponieważ przechwytywanie będzie takie samo jak w przykładzie 1, oczywiście zmieniając część polecenia. Przejdźmy do przykładu, w którym używamy kodu Pythona.
Przykład 5
Umieścimy kod w Pythonie tak prosty, jak to tylko możliwe, aby nasłuchiwał połączenia, odbierał dane i się kończył.
importuj gniazdo s = socket.socket() s.bind (("192.168.56.1", 1987)) s.listen (1) conn, addr = s.accept() data = conn.recv (1024) .decode (" utf-8 ") drukuj (dane)Uruchomię ten kod w systemie Windows, a następnie z Linuksa połączę się z nim przez netcat, poniższy obrazek pokazuje stronę kliencką w Linuksie:
A jak by to wyglądało w systemie Windows:
Jeśli coś zmodyfikujemy kod, możemy zmusić go do wykonania polecenia i przesłania nam jego zawartości, ale możemy też zwrócić powłokę, która pozwoli nam zrobić wiele rzeczy, więc przejdźmy do następnego przykładu.
Przykład 6
W tym przykładzie zamierzam uruchomić a kod Pythona Na tym samym komputerze z Linuksem, a ja połączę się z netcatem, sprawdzimy, czy powłoka (/bin/bash) nam zwraca. Poniżej zostawiam kod Pythona, tak prosty i krótki, jak to tylko możliwe, tylko dla przykładu.
importowanie gniazda, podproces s = socket.socket (socket.AF_INET) s.setsockopt (socket.IPPROTO_IP, socket.SO_REUSEADDR, 1) s.bind (("", 1987)) s.listen (1) conn, addr = s .accept() p = subprocess.Popen (["/ bin / bash"], stdin = conn, stdout = conn, stder = conn)Kod Pythona jest wykonywany i widać następujące elementy (obrazek pokazuje, jak wygląda połączenie z netcata):
Widzimy, że nasłuchuje, kiedy go wykonujemy, ale kiedy klient się łączy, połączenie się zamyka i mamy dla siebie powłokę.
Moglibyśmy też zrobić kod, który łączy się z naszą maszyną, który umieścimy do nasłuchiwania na określonym porcie, generalnie jest wiele możliwości, teraz trzeba zbadać i "pobawić się" netcatem, co jak widzieliście może pomóc nam w wielu chwilach.
Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt