Получение ping-пакетов, несмотря на блокировку входящих ping-пакетов

Вы можете сделать что-то вроде:

 max {max = l; s = $0}
        END {print s}'

Мы сортируем ввод, используя сравнение байтов -и -байтов(sortв локали C ), что гарантирует, что строки с самым длинным общим префиксом являются смежными.

sedнаходит самый длинный общий префикс между одной строкой и следующей, используя обратную связь BRE -ссылки (\(.*\).*\n\1, представляющие собой захваченную последовательность символов \(.*\), за которой следует любое количество символов .*, символ новой строки \nи та же последовательность символов, что была зафиксирована ранее \1), которую мы печатаем.

awkнаходит самый длинный из них (выбирает первый во входных данных, если их несколько, поэтому он будет первым в лексическом порядке. Используйте >=вместо >, чтобы получить последний ).

Обратите внимание, что он находит самый длинный общий префикс с точки зрения символов . Чтобы получить его в виде байтов , установите $LC_ALLна Cдля всех 3 команд, а не только sort. Тогда, например, в UTF -8 локалей, вместо того, чтобы найти 2 символа Stкак самый длинный общий префикс между Stéphaneи Stábat, он найдет 3 байта,St<0xc3>, где <0xc3>является первой половиной символов áи é.

В терминах расширенного графемного кластера . Например, так что между Stepsи Stéphane(, где éвыражается как двухсимвольный кластер графем e\u0301), он находит Stвместо Ste, вы можете прибегнуть кperl:

}
    if ("$prev$_" =~ /^(\X*).*\n\1\b{g}/) {
      $l = length($1);
      if ($l > $max) {$max = $l; $s = $1}
    }
    $prev = $_;
    END{print "$s\n"}'

(, где \Xсоответствует расширенному кластеру графемы , а \b{g}— границе расширенного кластера графемы (, для которой вам нужен perl 5.22.1 или новее )).

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

1
23.12.2020, 15:24
2 ответа

Ваше правило iptables блокирует внешние эхо-запросы -к вашей системе, но по-прежнему получает эхо-ответы -. Когда вы пингуете google.com, ваша система отправляет эхо-запрос -на google.com (, что разрешено ), а затем google.com отвечает вашей системе эхо-ответами -(, что также разрешено. ).

В текущей ситуации вы можете заблокировать эхо-ответы -, добавив еще одно правило INPUT.

$ sudo iptables -A INPUT -p icmp --icmp-type echo-reply -j DROP

Другой другой подход заключается в том, чтобы заблокировать отправку системой эхо-запросов -и эхо-ответов -с помощью цепочки OUTPUT.

$ sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP
$ sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
0
18.03.2021, 22:41

Три возможных вещи, которые могут играть здесь:

Во-первых, вы отбрасываете пакеты типа "echo-request ", это то, что отправляет ваша программа ping. Ответ, который вы получаете с пульта, — «эхо -ответ», вы его не блокировали.

Некоторые низкоуровневые -способы отправки необработанных пакетов фактически обходят iptables. Я думаю, что помню, по крайней мере, сервер / клиент ISC DHCP, работающий, даже если iptables настроен на отбрасывание пакетов DHCP. (По крайней мере, клиент должен иметь возможность отправлять пакеты с нулевым адресом в качестве источника, поскольку при запуске у него еще нет адреса. )Если я не ошибаюсь, это будетAF_PACKET(см. packet(7)), но инструмент pingв моем Debian не использует это и подчиняется iptables.

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

0
18.03.2021, 22:41

Теги

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