У меня на сервере запущено приложение HTTP. Я не могу изменить приложение, но я хотел бы вызвать событие, когда конкретный запрос POST отправляется приложению.

Я хотел бы запустить скрипт bash и передать ему такие аргументы, как IP-адрес клиента, отправляющего запрос, и заголовки HTTP-запроса.

Какие инструменты я могу использовать для достижения этой цели? Я хотел бы, чтобы он был как можно более легким и должен работать на безголовой машине.

3 ответа3

0

Один из способов сделать это (при условии, что вы используете веб-сервер Apache, который не указан, но я предполагаю, что вы используете bash), - это изменить apache для регистрации данных постов, используя mod_security или mod_dumpio. (См. Http://www.cyberciti.biz/faq/apache-mod_dumpio-log-post-data/ и https://modsecurity.org/documentation/modsecurity-apache/1.9.3/html-multipage/07-logging .html).

Затем используйте что-то, чтобы контролировать вывод и передать это bash. (Не смотря на то, что fail2ban может быть настроен для этого, но я не пробовал). В качестве альтернативы вы можете попытаться проанализировать поток журнала через bash и выбрать то, что вам нужно, или для этого могут быть другие инструменты. Грубый, но простой подход, в зависимости от того, насколько жесткими являются ваши временные рамки, может заключаться в регулярной ротации файла журнала (скажем, каждую минуту) с помощью bash-скрипта как части ротации журнала.

0

Я нашел способ сделать это, используя node.js и модуль node_pcap.

Вы можете установить его, как описано здесь.

Это идет с примером слушателя http, который может быть вызван так.
sudo node_modules/pcap/examples/http_trace -f "tcp port 80"

Генерирует вывод как

12:11:53.131 undefined:35748 -> 127.0.0.1:80 #2 HTTP 1.1 request: GET /example/css.css
12:11:53.131 127.0.0.1:80 -> undefined:35748 #2 HTTP 1.1 response: 304 Not Modified
12:11:53.131 127.0.0.1:80 -> undefined:35748 #2 HTTP 1.1 response complete 6.08KB

Этот пример был достаточным для моих целей. Он предоставляет метод, URL и IP-адрес.

0

На мой взгляд, хорошим вариантом для этих сценариев является использование httpry (на Github). Он нацелен на трафик HTTP. Выходные данные довольно просты для анализа, и вам не нужно заботиться о правилах фильтрации, как при работе с tcpdump . httpry основан на libpcap как и большинство других связанных инструментов.

Сборка это была обычная легкая make которой привыкли другие инструменты, ./configure только с исходным кодом (нет./ Сконфигурируйте в прошлый раз, когда я это пробовал)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .