> sprawdź jakie znalazł ogłoszenia

Bezpieczny serwer WWW w BASH-u.

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.

Autor:
Quake , 641 dni temu
strona w języku http://quake.wikidot.com/www-server-in-100-line...
Tagi:
linux bash www server 100 serwer internet ciekawostki
  • No tak, netcat ;)

  • Quake (www)

    [pokaż komentarz] +2 + - 09-05-2008

    netcat dobry jest :)

  • livarot

    [pokaż komentarz] +16 + - 10-05-2008

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

  • fman

    [pokaż komentarz] +2 + - 10-05-2008

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

  • Quake (www)

    [pokaż komentarz] 0 + - 10-05-2008

    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).

  • anath0r

    [pokaż komentarz] -9 + - 10-05-2008

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

  • Quake (www)

    [pokaż komentarz] +22 + - 10-05-2008

    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 <http://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.

  • wowo86

    [pokaż komentarz] 0 + - 10-05-2008

    Jest do tego wtyczka do PHPa ? :>

  • hind (www)

    [pokaż komentarz] +1 + - 10-05-2008

    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.

  • Socek

    [pokaż komentarz] -1 + - 10-05-2008

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

  • Quake (www)

    [pokaż komentarz] +2 + - 10-05-2008

    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 ;)

  • świetna sprawa ;D

  • aph216

    [pokaż komentarz] +11 + - 10-05-2008

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

  • Quake (www)

    [pokaż komentarz] +2 + - 10-05-2008

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

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

  • Quake (www)

    [pokaż komentarz] 0 + - 11-05-2008

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

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

  • Kszyh (www)

    [pokaż komentarz] +1 + - 10-05-2008

    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 :(

  • Quake (www)

    [pokaż komentarz] +2 + - 10-05-2008

    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 :)

  • Obi-San (www)

    [pokaż komentarz] +2 + - 10-05-2008

    Kawał dobrej roboty. Gz Quake!

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

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

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

  • Quake (www)

    [pokaż komentarz] 0 + - 10-05-2008

    trafiłem na kilka serwerów <http://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ę)

  • hind (www)

    [pokaż komentarz] 0 + - 10-05-2008

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

  • Quake (www)

    [pokaż komentarz] +1 + - 11-05-2008

    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 ;)

  • niezle. oby wiecej takich wykopow.

    niestety nie udalo mi sie uruchomic:
    ./ http://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
    ./ http://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?

  • Quake (www)

    [pokaż komentarz] 0 + - 11-05-2008

    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!

  • Quake: Poniżej 1024.

  • Quake (www)

    [pokaż komentarz] +2 + - 11-05-2008

    Przepraszam. Błąd zaokrąglenia.

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

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

  • radd (www)

    [pokaż komentarz] +1 + - 11-05-2008

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

  • Kszyh (www)

    [pokaż komentarz] +1 + - 11-05-2008

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

  • radd (www)

    [pokaż komentarz] 0 + - 12-05-2008

    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

  • tmi

    [pokaż komentarz] 0 + - 11-05-2008

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

  • Quake (www)

    [pokaż komentarz] +1 + - 11-05-2008

    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

  • 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;)

  • Quake (www)

    [pokaż komentarz] 0 + - 12-05-2008

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

Dodaj komentarz

Tylko zalogowani użytkownicy mogą dodawać komentarze.



copyright © 2010 Wykop