Bezpieczny serwer WWW w BASH-u.

166 wykop

Strona opisuje bezpieczny serwer WWW napisany w niecałych 100 liniach w języku skryptowym BASH. Zawiera kod źródłowy i krótki opis wraz ze screenshotami.

Dodane przez

Quake Quake
Quake
22 mies. temu dodał
  • obserwujących (0)
  • ranking (poza rankingiem)
  
  
 
 
  • [ pokaż komentarz ]
    fanzonun Avatar
       
    +2 fanzonun 22 mies. temu

    No tak, netcat ;)

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
    +2 Quake 22 mies. temu

    netcat dobry jest :)

       
       
  • [ pokaż komentarz ]
    livarot Avatar
       
    +16 livarot 22 mies. temu

    Tytuł pewnie jest trochę mylący dla młodego, nieulinuksiowionego wykopowego pokolenia : )

       
       
  • [ pokaż komentarz ]
    fman Avatar
       
        +2 fman odpowiedział 22 mies. temu

    Nie da się ukryć, każdy z nas pomyślał o innym niż ten bashu... :)

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
        0 Quake odpowiedział 22 mies. temu

    Pewnie chodziło wam o http://bash.org.pl/ :D

    Ja kiedyś zastanawiałem się co ludzie widzą zabawnego w stronce BASH-a (bo byłem przekonany, że to taka zwykła stronka o shellu, dopóki nie zajrzałem).

       
       
  • [ pokaż komentarz ]
    anath0r Avatar
       
    -9 anath0r 22 mies. temu

    ale ja nie rozumie wytłumacz mi to......

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
    +22 Quake 22 mies. temu

    BASH to powłoka systemu Linux. Jedna z wielu dostępnych, ale chyba najczęściej stosowana. Umożliwia pisanie skryptów na bardzo wysokim poziomie, z wykorzystaniem gotowych programów (w przeciwieństwie do bibliotek w innych językach programowania).

    Tu udało mi się napisać serwer WWW w BASH-u w niecałych stu liniach.

    Wprawdzie istnieją podobne serwery, ale wszyscy ich twórcy zastrzegają, że nie należy ich stosować. Mój serwer jest wprawdzie wolny, gdy w grę wchodzi kilka połączeń na raz (bowiem może je zrealizować tylko po kolei), ale jest dość bezpieczny (jeśli się go używa z głową), aby móc go bez skrupółów uruchomić nie tylko dla zabawy, ale również, by podzielić się pewnymi plikami ze znajomymi w bardzo szybki sposób.

    Przykładowe działanie jest zobrazowane screenshotami.

       
       
  • [ pokaż komentarz ]
    wowo86 Avatar
       
    0 wowo86 22 mies. temu

    Jest do tego wtyczka do PHPa ? :>

       
       
  • [ pokaż komentarz ]
    hind Avatar
       
        +1 hind odpowiedział 22 mies. temu

    napisz serwer w php, i po problemie (używając socket_create). Lub użyj php w trybie cgi.
    A swoją drogą, to nie myślałem że bash jest aż tak potężny.

       
       
  • [ pokaż komentarz ]
    Socek Avatar
       
        -1 Socek odpowiedział 22 mies. temu

    Bash jest potęzny. Ale przy dużych projektach jest po prostu nie czytelny.

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
        +2 Quake odpowiedział 22 mies. temu

    Hehe, nawet myślałem o wsparciu wykonywaniu skryptów

    Np. jeśli nazwa pliku kończy się na .qsmf (quake server magic file) to zamiast go catować do netcata, serwer by go wykonywał i dawał jego wyjście do netcata. Wtedy można w takim pliku używać dowolnych języków skryptowych: php, python, ruby, perl, bash ;)

       
       
  • [ pokaż komentarz ]
    wujekmisiek Avatar
       
    0 wujekmisiek 22 mies. temu

    świetna sprawa ;D

       
       
  • [ pokaż komentarz ]
    aph216 Avatar
       
    +11 aph216 22 mies. temu

    Nie do końca jest to serwer WWW, bo wszystkie pliki przesyła jako application/x-download-this.

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
        +2 Quake odpowiedział 22 mies. temu

    To słuszna uwaga.

    Jednak, zauważ, że serwer generuje HTML-owe wyjście, gdy zapytasz go o katalog. A że jest to serwer raczej do szybkiego udostępnienia komuś plików, to nawet specjalnie ustawiam taki typ MIME, żeby klient zdecydował się ściągać zamiast np. pobierać.

    Pytanie jeszcze co znaczy serwer WWW, myślę, że to dość szerokie pojęcie :).

       
       
  • [ pokaż komentarz ]
    voldenet Avatar
       
        +2 voldenet odpowiedział 22 mies. temu

    Chwila moment, a pobierać i ściagać to nie to samo?

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
        0 Quake odpowiedział 22 mies. temu

    Kurde, faktycznie miało być ściągać, a nie wyświetlać :D

       
       
  • [ pokaż komentarz ]
    Nivertius Avatar
       
        0 Nivertius odpowiedział 22 mies. temu

    A nie wystarczyłoby:
    "Content-Type: file --mime $file"

       
       
  • [ pokaż komentarz ]
    Kszyh Avatar
       
    +1 Kszyh 22 mies. temu

    chciałem go przetestować httperf... no chyba jednak za wysoką mu poprzeczke postawiłem :) bo httperf wywalił błęda po 4 sekundach (prawdopodobnie bashserwer nie nadarzał obsługiwać połączenia)... a szkoda :(

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
        +2 Quake odpowiedział 22 mies. temu

    Dzięki za chęć zrobienia benchmarka. Aż sam byłbym ciekawy.

    Serwer działa na zasadzie:
    1. otwórz port
    2. poczekaj na zgłoszenie
    3. obsłuż zgłoszenie
    3a. jeśli katalog, to daj listing z linkami
    3b. jeśli plik, to daj cat
    4. zamknij port
    5. idź do 1

    Łatwo sobie wyobrazić, że serwer nie obsłuży kilku połączeń na raz, a nawet sekwencyjne odpytywanie może się zakończyć niepowodzeniem, jeśli zapytanie przyjdzie dokładnie pomiędzy krokiem 4 i 5.

    Niewątpliwą natomiast zaletą jest czas uruchamiania serwera (około 0 sekund) i instalacji (czas skopiowania do pliku + wpisanie bash nazwapliku numerportu -- jakieś 10 sekund).

    Dzięki za wszystkie komentarze i wykopy, nie spodziewałem się TAKIEGO rezultatu :)

       
       
  • [ pokaż komentarz ]
    Obi-San Avatar
       
    +2 Obi-San 22 mies. temu

    Kawał dobrej roboty. Gz Quake!

       
       
  • [ pokaż komentarz ]
    krzysiekdrozd Avatar
       
    -1 krzysiekdrozd 22 mies. temu

    pewnie i tak lepiej działa niż IIS :p

       
       
  • [ pokaż komentarz ]
    fanzonun Avatar
       
        +1 fanzonun odpowiedział 22 mies. temu

    No chyba żartujesz :P IIS to całkiem niezły serwer.

       
       
  • [ pokaż komentarz ]
    fanzonun Avatar
       
        +2 fanzonun odpowiedział 22 mies. temu

    Widzę, że trafiłem na maniaków religijnych, no cóż, tak to już jest z komputerami :)

       
       
  • [ pokaż komentarz ]
    heathenreel Avatar
       
        +1 heathenreel odpowiedział 22 mies. temu

    Nie, trafiłeś na dyletantów. ;)

    Polecam jeszcze artykuł:
    http://webhosting.pl/kategorie/tips_tricks/software/jak_i_do_czego_wykorzystywac_netcat_spoofing_serwer_plikow_www_uptime

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
        0 Quake odpowiedział 22 mies. temu

    trafiłem na kilka serwerów WWW w BASH-u, ale większość jest zupełnie nieedukacyjnymi wybrykami w mniej niż 10 liniach. Mój serwer np. wycina wszystkie kropki, slesze i minusy z początku URL-a, oraz ciąg "..", co sprawia, że nie powinien on dać dostępu do plików, które nie znajdują się w katalogu bieżącym (no chyba, że ktoś zrobi sobie linka -- na własną prośbę)

       
       
  • [ pokaż komentarz ]
    hind Avatar
       
    0 hind 22 mies. temu

    fuck, w złym miejscu odpowiedziałem :/ miało byćdo Quake, a jak wyszło widać...
    to się nazywa CGI :p

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
        +1 Quake odpowiedział 22 mies. temu

    no się nazywa i nie do końca, bo CGI to jednak pewien standard, nie będę nazywać czegoś co działa jak CGI tym terminem, bo jednak to nie do końca to samo ;)

       
       
  • [ pokaż komentarz ]
    wujekbogdan Avatar
       
    +1 wujekbogdan 22 mies. temu

    niezle. oby wiecej takich wykopow.

    niestety nie udalo mi sie uruchomic:
    ./www.sh: line 63: nc: command not found
    sob, 10 maj 2008, 22:45:11 UTC INFO Processing as file
    sob, 10 maj 2008, 22:45:11 UTC INFO Killing nc
    ./www.sh: line 74: kill: (3936) - Nie ma takiego procesu
    sob, 10 maj 2008, 22:45:11 UTC INFO Running nc
    i tak dalej i tak dalej....

    brakuje mi pewnie jakiejś paczki. tylko w skład jakiego pakietu wchodzi nc i co to w ogóle jest nc?

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
        0 Quake odpowiedział 22 mies. temu

    brakuje Ci netcata

    Sprawdź czy masz komendę netcat (bo w niektórych dystrybucjach jest nc, w innych netcat).

    Jeśli masz netcata a nie masz nc, to podmień po prostu nc na netcat i przetestuj.

    Jeśli nie masz ani nc ani netcata, to ściągnij sobie z paczek do systemu.

    Pamiętajmy, żeby nie próbować pogadawać portów poniżej 1000, gdyż może je tylko otworzyć program działający z prawami administratora systemu!

       
       
  • [ pokaż komentarz ]
    tbhthelolmaker Avatar
       
        +4 tbhthelolmaker odpowiedział 22 mies. temu

    Quake: Poniżej 1024.

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
        +2 Quake odpowiedział 22 mies. temu

    Przepraszam. Błąd zaokrąglenia.

       
       
  • [ pokaż komentarz ]
    voldenet Avatar
       
    -1 voldenet 22 mies. temu

    Ciekawe czy serwer w pliku .bat dałoby się napisać w 10^10^10^10 liniach... :)

       
       
  • [ pokaż komentarz ]
    heathenreel Avatar
       
        +2 heathenreel odpowiedział 22 mies. temu

    Netcat jest też na windę, więc wydaje mi się, że czemu nie. :)

       
       
  • [ pokaż komentarz ]
    radd Avatar
       
    +1 radd 22 mies. temu

    czyżby była jeszcze nadzieja dla wykopu? :)
    może macie link do jakiegoś tutoriala "jak napisać prosty serwer http"?

       
       
  • [ pokaż komentarz ]
    Kszyh Avatar
       
        +1 Kszyh odpowiedział 22 mies. temu

    no, ale po co Ci tutorial ?
    Naucz się basha (kursów w pi*** i troche na seci) i przeanalizuj kod serwera www z tego wykopu. Nauczysz się o wiele więcej niż z jakiegokolwiek tutka.

       
       
  • [ pokaż komentarz ]
    radd Avatar
       
        0 radd odpowiedział 22 mies. temu

    dzięki, znam basha :P Na codzień korzystam z Linuksa i używam go dość często w różnego rodzaju skryptach. Nie jest trudny, to tylko kilka podstawowych operacji do spięcia programów znajdujących się w systemie.
    Chodziło mi o tutorial
    - jak zarezerwować sobie port x
    - jak nadawać/odbierać na niego dane
    - jakie cechy musi spełniać program, aby był serwerem.
    Tutaj prawie wszystko robi netcat.
    chcaił bym tutorial jak napisać coś znacznie prostrzego (serwer serwujący wyłącznie index.html, bez zabezpieczeń) i taki jak napisać coś znacznie trudniejszego w "prawdziwym" języku programowania np. Pythonie.
    tak kod wiele pokazuje, on coś robi, ale nie wytłumaczy mi dlaczego to robi :P

       
       
  • [ pokaż komentarz ]
    tmi Avatar
       
    0 tmi 22 mies. temu

    Więc BASH jest językiem programowania?, a czy takim samym czy innym od ZSH, CSH?, jakie są różnice pomiędzy nimi?

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
        +1 Quake odpowiedział 22 mies. temu

    BASH (http://pl.wikipedia.org/wiki/Bash) jest shellem, ale zgodnie ze wszelkimi definicjami również językiem programowania.

    Różnice w stosunku do innych shellów (jak np. wymienione przez Ciebie zsh, csh):
    http://www.unix.com/answers-frequently-asked-questions/12274-difference-between-ksh-bash-different-shells.html

       
       
  • [ pokaż komentarz ]
    bectrux Avatar
       
    0 bectrux 22 mies. temu

    Jesli ktos spotkalby sie z problemem dotyczacym niepoprawnych opcji do netcata, to interpretujac man'a do mojego nc:
    -p source_port
    ... It is an error to use this option in conjunction with the -l option.

    zmienilem linijkę:
    nc -l -p "$port" < "$sin" > "$sout" &
    na:
    nc -l "$port" < "$sin" > "$sout" &

    I wszystko smiga;)

       
       
  • [ pokaż komentarz ]
    Quake Avatar
       
        0 Quake odpowiedział 22 mies. temu

    o to ciekawe, mamy chyba jakieś inne wersje ;)