В целях безопасности мы хотим перечислить все 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: .*'