Ncat веб-сервер, как получить параметры запроса и IP-адрес клиента - PullRequest
1 голос
/ 28 сентября 2019

Я использую ncat в качестве веб-сервера для простых веб-страниц, написанных на bash.но как я могу получить параметры запроса get и post и ip клиента из текущего запроса?Я попробовал это с перенаправлением stdout и ошибок каналов в файл журнала.но это глючит, потому что я всегда получаю только журнал из предыдущего запроса, а не текущий запрос.

здесь мой код: команда терминала:

<code>while true; do bash indexlog.sh | ncat -lv 8000 &>>ncat.log;done
cat indexlog.sh:
#!/bin/bash
echo -e 'HTTP/1.1 200 OK\r\n'
echo -e '<!DOCTYPE html>'
echo -e '<html lang="en">'
echo -e '<head>'
echo -e '<meta charset="utf-8"/>'
echo -e '</head>'
echo -e '<body>'
echo -e '<pre>'
echo request time=$(date)
cat ncat.log
echo ''>ncat.log
echo -e '
'echo -e' '

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Ваш скрипт запускается и выводит на канал.Затем начинается процесс прослушивания ncat.Попробуйте запустить слушатель как отдельный процесс.Сначала запустите слушатель.

# listener process: (`-k` to keepalive)
ncat -lk 8000 >> ncat.log

Затем в другом терминале, например:

# incoming requests
while true; do
   ./indexlog.sh | ncat localhost 8000
    sleep 5
done

Редактировать Также удалите эти строки, которые могут работать, но могут вызвать конфликт какодин процесс должен повторно искать начало журнала из-за усечения -:

cat ncat.log
echo ''>ncat.log
0 голосов
/ 29 сентября 2019

теперь со скриптом ncat + lua что-то возвращается.выглядит как ссылка на объект или около того: терминал1:

user1@pc1:~/ncattest$ ncat -klv 8000 --lua-exec hello.lua

терминал2:

user1@pc1:~/ncattest$ cat hello.lua 
#!/usr/bin/lua
print(os.getenv("QUERY_STRING"))
user1@pc1:~/ncattest$ curl localhost:8000/a
curl: (52) Empty reply from server
user1@pc1:~/ncattest$ curl localhost:8000/?a=3&g=5
[1] 20312
user1@pc1:~/ncattest$ curl: (52) Empty reply from server

[1]+  Exit 52                 curl localhost:8000/?a=3
user1@pc1:~/ncattest$ curl localhost:8000/?a=3&g=5
[1] 20317
user1@pc1:~/ncattest$ curl: (52) Empty reply from server

[1]+  Exit 52                 curl localhost:8000/?a=3
user1@pc1:~/ncattest$ curl localhost:8000/a
curl: (52) Empty reply from server
user1@pc1:~/ncattest$ curl localhost:8000/a?b=3&c=5
[1] 20329
user1@pc1:~/ncattest$ curl: (52) Empty reply from server

[1]+  Exit 52                 curl localhost:8000/a?b=3
user1@pc1:~/ncattest$ 

, но это не помогает.проблема все еще в том, что в чистой среде ncat нет переменной окружения query_string.и поэтому нет никаких полезных динамических веб-страниц.так что мне нужно остаться со сценариями cgi, если я хочу перейти к реальным, в основном, веб-сценариям с bash ... так что единственный способ на этом уровне ncat bash - получить строку запроса, с первой попыткой перенаправить stdout и stderrБаш.но это не работает для меня.

...