Использование netcat в качестве простого CGI-сервера - PullRequest
0 голосов
/ 04 сентября 2011

Я пытался использовать следующий сценарий для создания простого CGI-сервера (из http://www.jfranken.de/homepages/johannes/vortraege/netcat_inhalt.en.html). Это больше по технической причине, по которой он не работает, чем по хорошему:

#!/bin/bash
export port=${port:-$1} # inherit $1 as $port
/usr/local/bin/nc -l -p $port -e $0 &  # await further connections on this port
echo "hi"

Кто-нибудь знает, почему это не работает должным образом? При первом выполнении он выводит «привет» на терминал, что я ожидаю. Затем я ожидаю, что netcat будет ожидать на указанном порту, готовый создать новую копию этогосценарий с STDOUT, связанным с сетевым сокетом (из-за флага -e). Таким образом, HTTP-запросы GET к указанному порту получат текст «hi».

В действительности каждый запрос GET вызываетновый процесс netcat, который будет порождаться по одному (что я ожидаю), но ни один из запросов GET не будет завершен, пока я не завершу последний процесс netcat. В этот момент первый выданный мной запрос GET отвечает «привет», ивсе остальные возвращаются как неудачные попытки подключения. Я подозреваю, что это как-то связано с моим заблуждением относительно деталей STDOUTперенаправление, но я понимаю, что этот скрипт будет просто создавать новую версию каждый раз, когда кто-то подключается, и STDIN / OUT для скрипта должен быть сетевым сокетом из-за флага -e netcat.

1 Ответ

0 голосов
/ 04 сентября 2011

Опция -e для netcat не будет работать, если она не скомпилирована с -DGAPING_SECURITY_HOLE, что должно дать вам некоторую паузу в отношении мудрости таких действий. Это также опция, которая доступна только в производных netcat и bsd-ish от Hobbit, но не в afaik в GNU netcat.

Можете ли вы достичь желаемого результата, передав данные в процесс netcat? Например

echo "hi" | nc -l -p $port 

Похоже, что в значительной степени тот же эффект, однако данные, скорее всего, генерируются до установления соединения, а не после, как при использовании флага -e. Если ваши данные не должны быть основанными на времени или интерактивными, это сработает.

...