Обнаружение «плохих» изображений из командной строки

Если я хорошо понял все ваши требования, делайте так:

# assuming your network interface is named `eth1` as per your OP example

iptables -t raw -A PREROUTING -i eth1 -p tcp --dport 3306 -j DROP
iptables -t nat -A PREROUTING -p tcp --dport 12345 -j REDIRECT --to-port 3306

Первая команда запрещает соединения, входящие от eth1к tcp-порту 3306.

Вторая команда перенаправляет любое входящее соединение, направленное на локальный порт 12345, на локальный порт 3306.

Если у вас есть несколько интерфейсов с именами вроде eth0, eth1, eth2и т. д., и вы хотите заблокировать их все, вы можете получить это, просто указавeth+(обратите внимание на знак плюс )в первой команде выше, в противном случае, чтобы выборочно заблокировать только определенные интерфейсы, вам нужно будет использовать эту первую команду один раз для каждого интерфейса, который нужно заблокировать.

Приведенные выше две команды необходимы для достижения запрошенного поведения, и их может быть достаточно в зависимости от ваших общих потребностей.


Тем не менее, для более стабильной работы я бы посоветовал дополнительную дополнительную конфигурацию:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 12345 -j REDIRECT --to-port 3306

Это перенаправляет локально соединения с локального порта 12345 на локальный порт 3306, так что вы можете подключиться к вашему mysql через порт 12345 с той же локальной машины.


Наконец, как важная сторона -примечание , имейте в виду, что -Aопция iptablesкоманды добавляет правила к уже существующим,которые, таким образом, имеют приоритет перед добавленными новыми, тем самым мешая им.

Поэтому, если вы поэкспериментируете с любой командой iptables, вам может понадобиться очистить задействованные таблицы в какой-то момент, и вы можете сделать это с помощью опции -F, например:

iptables -t raw -F PREROUTING
iptables -t nat -F PREROUTING

# and possibly also
iptables -t nat -F OUTPUT
# if you also used the additional advised commmand

С другой стороны, также имейте в виду, что эти команды очищают все правила, присутствующие в этих таблицах, включая те, которые могли быть там из-за других установленных брандмауэров. Есть более тонкие команды для выборочного удаления определенных правил, но они зависят от вашей общей настройки iptables, если она очень сложна, помимо двух простых правил, показанных здесь.

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

iptables -t raw -nL PREROUTING
iptables -t nat -nL PREROUTING

# and possibly also
iptables -t nat -nL OUTPUT
# if you also used the additional advised commmand

Конечно, вы можете использовать их в любое время, чтобы видеть текущее состояние ваших таблиц по мере добавления правил. Затем вы можете добавить параметр v(как в -nvL), чтобы видеть счетчики для правил, когда они соответствуют (или не соответствуют )сетевому трафику с течением времени.

3
13.04.2020, 12:18
1 ответ

Использование ImageMagick

Это дает вам общее количество пикселей в изображении:

identify -verbose  ~/www/pictures/ISTI-F.jpg | sed -n '/.*Pixels: /s///p'

, а этот дает название доминирующего цвета и количество пикселей:

convert ~/www/pictures/ISTI-F.jpg -format "%c" histogram:info: | sort -nr -t: | head -1 | sed 's/\(.*\):.*#\(......\).*/\2\1/'

Пример:

$ identify -verbose ISTI-F.jpg | sed -n '/.*Pixels: /s///p'
1920000
$ convert ISTI-F.jpg -format "%c" histogram:info: | sort -nr -t: | head -1 | sed 's/\(.*\):.*#\(......\).*/\2\1/'
FFFFFF   1667711

Это может быть основой для написания сценария оболочки, но он не годится для проверки многих файлов, так как Imagemagick невероятно гибкий, но медленный

Использование октавы

Следующий сценарий Octave можно вызвать непосредственно из командной строки. Его аргументами должны быть два имени каталога errdirи baddirи список файлов изображений. Файлы, для которых библиотека LibMagick++, используемая Octave, выдает предупреждение или ошибку, перемещаются в errdir; файлы, у которых последние 25% строк одного цвета, перемещаются в baddir; другие файлы остаются нетронутыми. На стандартный вывод выдается краткий отчет.

Если вам нужен только отчет без перемещения файлов, не указывайте имена каталогов в качестве первых двух аргументов.

#!/usr/bin/octave -qf

threshold = 0.25;

usage = "Usage is: badfiles <file...> OR badfiles <errdir> <baddir> <file...>\n";
files\n";
assert(nargin>0, usage);
dryrun = isfile(argv{1});
if !dryrun
  errdir = argv{1};
  baddir = argv{2};
  assert(isfolder(errdir) && isfolder(baddir) && isfile(argv{3}), usage);
endif

start = 1 + 2*(!dryrun);
for fname = argv()(start:end)'
  q = [];
  f = fname{};

  warning error
  try
    q = imread(fname{});
  catch err
  end_try_catch
  warning on

  if isempty(q)
    printf("error\t");
    dryrun || movefile(f, errdir);
  else
    qt = all(q == q(end,1,:),2);
    qtt = squeeze(all(qt, 3));
    r = 1 - find(qtt==0, 1, 'last') / size(q, 1);
    if (r > threshold)
      printf("bad--%02d\t", ceil(100*r));
      dryrun || movefile(f, baddir);
    else
      printf("good-%02d\t", ceil(100*r));
    endif
  endif

  disp(f);
endfor

Чтобы это работало, у вас должна быть установлена ​​Octave. Скопируйте приведенное выше в файл с именем badimage, сделайте его исполняемым с помощью chmod +x badimageи протестируйте скрипт, например ./badimage *.jpg:, вы увидите список файлов с их статусом (хороший, плохой, ошибка ).

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

Когда вы будете удовлетворены результатами, создайте два каталога mkdir errpics badpics. Затем вызовите скрипт как ./badimage errpics badpics *.jpg. Таким образом, скрипт перемещает ваши файлы в каталоги, как описано выше.

ПРЕДОСТЕРЕЖЕНИЕ :После использования этого скрипта обязательно проверьте хороший образец изображений, которые помечены как плохие или ошибочные, прежде чем удалять их!

Алгоритм, обнаруживающий плохие изображения, надежен для фотографий, но не обязательно для рисунков, логотипов, диаграмм, графиков, которые могут содержать широкие допустимые области одного цвета. Файлы с ошибками могут быть плохими или поврежденными с точки зрения LibMagick++, но они хорошо читаются на обычно более мягких визуализаторах изображений.

6
19.03.2021, 02:30

Теги

Похожие вопросы