Spisu treści:

Netcat w Pythonie: 6 kroków
Netcat w Pythonie: 6 kroków

Wideo: Netcat w Pythonie: 6 kroków

Wideo: Netcat w Pythonie: 6 kroków
Wideo: CTF (#6) Szyfrowanie Cezara. Poszukiwanie przesunięcia metodą brute force w Pythonie 2024, Lipiec
Anonim
Netcat w Pythonie
Netcat w Pythonie

Co to jest netcat? Strona podręcznika dla netcata mówi: "narzędzie nc (lub netcat) jest używane do prawie wszystkiego pod słońcem, obejmującego gniazda TCP, UDP lub domeny UNIX. Może otwierać połączenia TCP, wysyłać pakiety UDP, nasłuchiwać arbitralnie Porty TCP i UDP, wykonują skanowanie portów i obsługują zarówno IPv4, jak i IPv6. W przeciwieństwie do telnet(1), skrypty nc ładnie rozdzielają komunikaty o błędach na standardowe błędy zamiast wysyłać je na standardowe wyjście, tak jak robi to telnet(1) z niektórymi"

Zasadniczo netcat umożliwia łączenie się z innymi serwerami za pomocą protokołu TCP lub UDP. TCP to skrót od Transmission Control Protocol i jest zorientowany na połączenie. UDP oznacza Universal Datagram Protocol i jest bezpołączeniowy. TCP jest powszechnie używany w aplikacjach internetowych, podczas gdy UDP jest używany do przesyłania strumieniowego multimediów lub sieci VPN.

Krok 1: Jak zaczynamy?

Jak zaczynamy?
Jak zaczynamy?

Powyżej tak nazywa się netcat. Widać, że na końcu są dwa argumenty zwane „miejscem docelowym” i „portem”. Miejsce docelowe odnosi się do nazwy hosta lub adresu IP serwera, z którym próbujemy się połączyć, podczas gdy port odnosi się do portu serwera, z którym próbujemy się połączyć.

Krok 2: Zacznijmy

Zaczynajmy
Zaczynajmy

Powyżej znajduje się początkowy kod Pythona. Jak widać, chcemy przetwarzać argumenty do programu podobnie, jak robi to rzeczywiste narzędzie. Nazwa hosta będzie pierwszym argumentem po nazwie pliku wykonywalnego, podczas gdy port będzie drugim argumentem po nazwie pliku wykonywalnego w wierszu poleceń.

Krok 3: Tworzenie połączenia

Tworzenie połączenia
Tworzenie połączenia

Stwórzmy funkcję netcat, której możemy użyć. To, co w zasadzie tutaj robimy, to tworzenie gniazda i łączenie się z serwerem przy użyciu podanych parametrów. W przypadku polecenia netcat bieżącymi parametrami są nazwa hosta i port serwera, z którym próbujemy się połączyć. Gniazdo zawiera parametry „socket. AF_INET” i „socket. SOCK_STREAM”, ponieważ w tym samouczku domyślnie używamy połączenia TCP.

Krok 4: wyślijmy trochę treści

Wyślijmy trochę treści
Wyślijmy trochę treści

Rozszerzyliśmy naszą funkcję netcat o trzeci parametr, „treść”. Jest tu dużo treści, więc podzielmy to według numeru wiersza.

Linia 14-16: przesyłamy całą zawartość przez gniazdo, czekamy chwilę, a następnie zamykamy gniazdo dla wszystkich danych wychodzących, aby gniazdo wiedziało, że nie ma więcej danych.

Linia 18-26: tworzymy bufor do przechowywania odpowiedzi serwera, a gdy gniazdo odbiera dane, dodajemy do wyniku do 1024 bajtów danych, o ile są dane do odczytania.

Linia 28-29: chcemy, aby to połączenie netcat było połączeniem jednorazowym, więc deklarujemy połączenie zamknięte, a następnie zamykamy połączenie.

Linia 31: To jest standardowe żądanie HTTP. Jeśli uruchomisz kod z argumentami wiersza poleceń „google.com” i „80”, zobaczysz poprawną odpowiedź

Krok 5: Miejmy otwarte połączenie

Miejmy otwarte połączenie
Miejmy otwarte połączenie

Powyższy kod (który znajduje się pod kodem z poprzedniej sekcji) po prostu pozwala nam uruchamiać wiele poleceń netcata przez połączenie pseudo-otwarte. (W rzeczywistości za każdym razem, gdy uruchamiasz polecenie, otwiera ono, a następnie zamyka nowe połączenie TCP, więc tak naprawdę nie naśladuje zachowania netcata, robimy to po prostu w celach edukacyjnych). Przeanalizujmy to również linia po linii:

Linia 31: Chcemy czytać polecenia w nieskończoność, aby zachować „interaktywność”

Linia 32: To jest nasz bufor, w którym będzie przechowywana zawartość naszego żądania

Linia 36-45: Będziemy czytać do bufora, dopóki nie odczytamy pustej linii

Linia 48: po prostu wywołujemy naszą funkcję netcat z nazwą hosta, portem i nowo utworzoną zawartością (która jest poprawnie zakodowana)

Linia 50: jeśli zawartość naszego bufora kiedykolwiek zawiera "Connection: Close" (wskazując, że chcemy zamknąć połączenie), po prostu wyrywamy się z pętli

Krok 6: Wniosek

Pod koniec tego samouczka powinieneś mieć minimalną działającą implementację netcata. Jako ćwiczenie pozostawiam użytkownikowi zaimplementowanie funkcji takich jak:

1. wspieranie innych protokołów

2. naprawienie kodu, aby nie zamykać połączenia za każdym razem;

3. dodanie flag, które netcat już musi zmodyfikować,

Zalecana: