Расширяя подход jordanm, я смог создать что-то удивительно устойчивое, не имея необходимость обращаться к статистике. Сценарий стал немного длиннее, к сожалению, но это закончено, и теперь я могу использовать его так часто, как мне нужен он только с выяснением правильных параметров.
Я протестировал его на дюжине фактических файлов данных, некоторые столь же грязные как этот:
Прием здесь является использованием MIN_DURATION
переменная, которая помогает игнорирующим временным скачкам и резкому спаду до конкретного количества строк.
Использование:
grep-begin-end FIELD_SEPARATOR FIELD_INDEX THRESHOLD_UP THRESHOLD_DOWN MIN_DURATION ...
Пример:
grep-begin-end , 2 30 4 5 file.csv
grep-begin-end
FIELD_SEPARATOR=$1
FIELD_INDEX=$2
THRESHOLD_UP=$3
THRESHOLD_DOWN=$4
MIN_DURATION=$5
shift 5
awk -F$FIELD_SEPARATOR -vthreshold_up=$THRESHOLD_UP -vthreshold_down=$THRESHOLD_DOWN 'BEGIN {
cur = "gt";
}
{
val = $'$FIELD_INDEX';
# strip of double quotes and convert to number
if (substr(val, 1, 1) == "\"") { val = 0 + substr(val, 2, length(val) - 3); } else { val = 0 + val; }
buf = "";
if (cur == "gt")
{
if (val >= threshold_up)
{
if (buf == "")
buf = $0;
if (duration >= '$MIN_DURATION')
{
print buf;
cur = "lt";
duration = 0;
buf = "";
}
else
{
duration++;
}
}
else
{
duration = 0;
}
}
else if (cur == "lt")
{
if (val <= threshold_down)
{
if (buf == "")
buf = $0;
if (duration >= '$MIN_DURATION')
{
print buf;
cur = "gt";
duration = 0;
buf = "";
}
else
{
duration++;
}
}
else
{
duration = 0;
}
}
}' "$@"
Во-первых, зачем? В docs для s_client
указано, что openssl по умолчанию будет использовать рукопожатие, которое определит правильный для вас протокол. Это и есть вся основа атаки POODLE. Проблема в том, что в версии 0.9.8 это рукопожатие начинается с SSL_V23 и в какой-то момент позже попробует TLSv1 . Многим серверам не нравится, когда клиенты соединяются с помощью SSL_V23, потому что это красный флаг, что клиент делает что-то небезопасное, следовательно, ваша проблема.
Как это исправить? Ну, я не смог найти ни одной опции для openssl.cnf, которая позволила бы вам сказать: "Эй, по умолчанию просто используйте TLSv1". В этом потоке , похоже, предполагают, что это возможно в v1.0.0+. После часа поиска в Google я решил, что лучше всего будет перекомпилировать openssl и отключить SSLv2 и SSLv3. Если вы перекомпилируете openssl, то, вероятно, будет намного проще использовать 0.9.8, попытка обновить openssl до 1.x+ в чем-то вроде RHEL может стать полным кошмаром.
Поскольку RHEL 5 страдает той же проблемой, я только что проверил их багзиллу: https://bugzilla.redhat.com/show_bug.cgi?id=1152789
Они сосредоточились в основном на Tomcat 6 и их JBoss-файлах, где это сводится к изменению нескольких строк в конфигурации сервера приложений.
Но внутри этого багзиллы есть поток, ведущий к openssl-проблеме RHEL5.
https://rhn.redhat.com/errata/RHSA-2014-1653.html
openssl-0.9.8e-31.el5_11 - это перекомпилированный openssl, который вам нужен.
Итак: IMHO вам просто нужно установить этот патч и заставить ваши серверы web/приложений не использовать небезопасные протоколы.