HTTP сервер размером в 222 байта

Опубликовано admin в Втр, 27/07/2010 - 12:59

В продолжение предыдущей идеи (_http://alexandr.sysoev.ru/node/86) с передачей файлов по HTTP. Я не удержался и написал вполне полноценный (для нужд раздачи файлов на соседний компьютер) HTTP сервер:

while true; do nc -vv -l -p 8080 -c '( read a b c; file=`echo $b | sed 's/[^a-z0-9.]//g'`; if [ a$file = "a" ]; then ( ls | (while read f; do echo "$f
"; done) ); else cat $PWD/$file; fi )'; sleep 1; done

(все это – одна команда, должна вводиться в одну строку. Тестировалось в linux/bash 3.1.17)

Вот и все :) Правда, на этот раз я опять решил отказаться от заголовков ответа, т.к. это слишком усложнит “команду”, но при желании их можно взять из предыдущего (_http://alexandr.sysoev.ru/node/86) примера. Этот сервер отдает все файлы, которые есть в текущем каталоге и пытается противодействовать попыткам его сменить. В случае, если запрашивается корневая директория, то управление передается своеобразному mod_index – т.е. выводится список файлов-ссылок. В конце добавлена задержка в 1 сек для того, чтобы была возможность убить его нажатием Ctrl-C.

Воистину, netcat одна из моих любимых программ!

p.s. Кто теперь осмелится заявить, что я не извращенец? :))

UPD: немного доделал его, см новую версию (_http://alexandr.sysoev.ru/node/59)

( categories: )