Linux split file – jak podzielić plik na party

W dzisiejszym wpisie pokażemy jak podzielić dowolny plik tekstowy na mniejsze części. Niektórzy z Was pytali nas w komentarzach w jaki sposób można rozłożyć słownik z potencjalnymi hasłami do ataku brute-force na mniejsze fragmenty. Motywowali to błędami w programie THC-Hydra wynikającymi z olbrzymiego rozmiaru pliku słownika tekstowego. W tym krótkim wpisie pokażemy jak podzielić plik na party za pomocą dwóch różnych sposobów. Pierwsze z nich to Linuksowy program split służący właśnie do tego celu. Druga metoda to nasze autorskie proste rozwiązanie problemu podziału pliku na kawałki napisane w języku skryptowym PHP. Postanowiliśmy ten skrypt udostępnić bo jest to można powiedzieć rozwiązanie multiplatformowe a nie każdy ma system Linux. Wystarczy w tej metodzie zainstalować sobie serwer np. XAMPP i odpalić nasz skrypt PHP w przeglądarce internetowej.

Split command czyli podział pliku na party

Program split jest już zainstalowany w systemie Kali Linux. Tym razem zamiast objaśniać dokładnie jak polecenia działa postanowiliśmy dać kilka przykładów. Zakładam że nasz plik nazywa się file.txt.

Podział pliku na mniejsze po 100 linijek:

split file.txt -l 100

Dodatnie przedrostka nazwy pliku „prefix”:

split file.txt -l 200 prefix

Użycie przyrostka numerycznego zamiast domyślnego literowego:

split file.txt -l 300 prefix -d

Podział na pliki po 1024 bajtów każdy (megabajt):

split file.txt -b 1024 prefix -d

Użycie przyrostka numerycznego o długości 5 znaków:

split file.txt -l 500 -d -a 5

Więcej informacji o programie uzyskasz wpisując w swoim terminalu polecenie man split.

Podział pliku w PHP

Poniżej przedstawiamy nasz file splitter. Jest to uproszczona implementacje linuksowego programu split. Jako parametry funkcji splitFile należy przekazać nazwe słownika i opcjonalne ilość linii w każdej części pliku. Do jego uruchomienia wystarczy dowolny serwer HTTP z interpretatorem PHP np: darmowy XAMPP. Plik split.php:

<?php

/*
 * @Author: https://haker.edu.pl/
 * @splitFile($fileName, $numLines = 100) - Split a file into pieces
 */

function splitFile($fileName, $numLines = 100) {
    set_time_limit(0);
    $file = fopen($fileName, 'r');
    $outputFolder = 'splitFiles';

    if (file_exists($fileName)) {

        if (!file_exists($outputFolder)) {
            mkdir($outputFolder);
        }

        $tmp = array();
        $i = 1;

        while (!feof($file)) {
            $tmp[] = fgets($file, 256);
            if (count($tmp) == $numLines) {
                file_put_contents($outputFolder . '/' . $fileName . '_' . $i . '.txt', $tmp);
                $tmp = array();
                $i++;
            }
        }

        fclose($file);
        return true;
    } else {
        return false;
    }
}

//Example usage text file splitter:
echo splitFile('file.txt', 250);
?>

Nasz powyższy program dzieli plik o nazwie file.txt znajdujący się w folderze ze skryptem na mniejsze części po 250 linijek każda. Jeśli chciałbyś inaczej nazywać folder wynikowy z nowymi słownikami wystarczy że zmodyfikujesz wartość zmiennej $outputFolder w 11 linii kodu źródłowego.

Efekt implementacji programu split linux file w języku interpretowanym PHP
Efekt działania naszego skryptu split.php w systemie Microsoft Windows. Plik file.txt został podzielony na 4 części. Każdy nowy plik posiada 120 linijek.

Myślę że dzisiaj już temat o linux splitterze i naszym odpowiedniku multi platformowym został wyczerpany. Jeśli ktoś jest chętny to sobie może sobie uzupełnić dodatkową funkcjonalność skryptu o wybór pliku z dysku za pomocą formularza HTML lub mechanizmu drag and drop. Warto wiedzieć że skrypty php można również wywoływać z poziomu konsoli cmd lub terminala Linux. Nie każdy wie, że i takie aplikacje można pisać w PHP. Być może zainteresują Cię jeszcze inne nasze wpisy na blogu:

Zlajkuj oczywiście naszego fanpage HakerEduPL na Facebooku! Powodzenia! 😉

9 thoughts to “Linux split file – jak podzielić plik na party”

    1. Kilka osób pytało ostatnio o bodajże 5GB słowniki i wywalało im ERRORY. W sumie sam nigdy nie testowałem, aż takich kobył na Hydrze chociaż posiadam słownik nawet i 30 gigabajtowy… 😀 Dzięki za komentarz Hurley! Coś ostatnio cicho na YT…

    2. Chwilowo cicho bo telefon mnie ogranicza i trochę problemów powoduje, ogólnie to pochwal się skąd pobrałeś ten słownik jeżeli jest taka możliwość, zawsze sie przyda jak by się zapomniało hasła do poczty 😉

    3. Aa to mam jednak ten sam notatnik, musze go kiedyś potestować na moich fejkowych kontach instagrama, facebooka itp.. jaką skuteczność ma, ale to musze wiecej sie nauczyć o HTML i POST 😀

      1. To raczej podstawy w każdym kursie formularzy HTML i PHP. Polecam również poczytać o protokole HTTP chociażby na wikipedii (po przestudiowaniu tych podstawowych kursów z naciskiem na php).

  1. Jesli kogoś interesuje, to mogę zademonstrować również wersje pythonową, która kiedyś napisałem 🙂

  2. szkoda że nie ma poradnika jak podzielić katalogi na pliki po 2gb. czasem musze wysłać cos przez wetransfer i wtedy kobinuje z wstawianiem na dysk google a potem pobieram paczki po 2GB ale to jak wiadomo czasocłonne 🙁

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *