Назад | Перейти на главную страницу

Захватывайте только HTTP-запросы post через tcpdump

В целях безопасности мы хотим перечислить все URI запросов POST, которые используются в наших приложениях (поэтому мы отключили бы POST через mod_security, за исключением этих URI). Идея состоит в том, чтобы использовать tcpdump для их захвата во время полного регрессионного теста, а затем wirehark для получения отдельного списка всех URI.

Проблема в том, что мы не можем найти правильные аргументы tcpdump для захвата только HTTP-запросов post (что необходимо, потому что полный tcpdump быстро заполнит диск).

Следующая команда работает с поиском, но показывает GET, POSTS и некоторые другие пакеты (слишком много):

sudo tcpdump -A 'tcp port 9081 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

После захвата только запроса POST, но в wirehark они отображаются как пакеты TCP, и мы не можем извлечь из них URI (как мы это делаем для HTTP, используя настраиваемое значение http.request.uri в wirehark):

sudo tcpdump -A 'tcp port 9081 tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'

Какие аргументы tcpdump мы должны использовать для захвата HTTP-запросов POST (которые отображаются как HTTP-пакеты в wirehark) или как мы можем извлечь URI из этих TCP-пакетов (вторая команда)?

tcpflow -p -c -i bond0 port 9081 | grep -oE '(GET|POST|HEAD) .* HTTP/1.[01]|Host: .*'