Iptables перенаправляет трафик порта на другой порт с вычислением байтов

Прямой ответ-Он ищет все вхождения числа в буквенно-цифровом тексте и удаляет их.

Пояснение-

 sed 's/[^0-9]*//g' filename

состоит из следующих компонентов.

  1. s/search_pattern/new_pattern/options-заменить (найти и заменить)
  2. []-регулярное выражение.
  3. *-подстановочный знак для 0 или более вхождений.
  4. g-global (опция -заменяет все вхождения в этой строке)

Давайте разберемся с каждым компонентом

1.sed 's/search _шаблон/новый _шаблон/параметры' имя файла

sed 's/akshat/saxena/' файл.txt

Это ищет в каждой строке шаблон «akshat» и заменяет только его первое вхождение на «saxena» в файле с именем file.txt

Здесь мы можем задать такие параметры, как g (global ), i (игнорировать регистр)

 (i) g(global)
         Discussed in point 4.

 (ii)  i - searches ignoring case (case- insensitive search)
  
   sed ' s/life/love/i' file.txt

  Replace life/Life/lIfe/liFe/life/lifE (and many more) with love

2. Регулярное выражение с использованием []

В регулярном выражении можно искать другую комбинацию или диапазон значений.

 sed 's/[Li][Ii][Ff][Ee]/love/g' file

означает, что в шаблоне есть L или l, за которыми следует I или i, за которым следует F или f, за которым следует E или e. Таким образом, становится нечувствительным к регистру -поиск.

Если требуется диапазон, используется дефис (-). [a -z] означает маленькую букву от a до z, то есть все буквенные символы. [0 -9] означает от 0 до 9, то есть все числовые символы.

Таким образом, в данном коде это относится к поиску всех числовых символов.

3.*

На его месте может стоять любой символ. Таким образом, в заданном коде любой символ может следовать за регулярным выражением [0 -9]

4. г (глобальный)

   replace all occurrence in that line.
    
       Inorder to replace first occurence in particular line use
           

файл sed 'n s/akshat/$$/'

       where n is the line number. 

Вышеприведенный код заменяет шаблон «akshat» на $$ в n-й строке.

0
19.02.2021, 15:12
1 ответ

Вам потребуется следующее:

# Tag UDP packets of the "connection" with mark 50000
iptables -t mangle -A PREROUTING -p udp --dport 50000 -j CONNMARK --set-mark 50000

# Make the port redirection
iptables -t nat -A PREROUTING -p udp --dport 50000 -j REDIRECT --to-port 3478

# Count the bytes with mark 50000
iptables -m connmark -t mangle -A OUTPUT -p udp --sport 3478 --mark 50000

iptables -t mangle -nvLзатем покажет:

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    4   132 CONNMARK   udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:50000 CONNMARK set 0xc350
...
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2    66            udp  --  *      *       0.0.0.0/0            0.0.0.0/0            connmark match  0xc350 udp spt:3478

Пояснения:

  • При использовании -j REDIRECTвы не можете создать правило, которое будет соответствовать исходящему пакету с порта 50000, потому что все исходящие пакеты соединения на порту 50000 будут соответствовать --sport 3478, но не --sport 50000, хотя фактический пакет покажет исходный порт UDP 50000 при захвате сети. Я не знаю, ошибка это или ожидаемое поведение (протестировано с iptables 1.8.2 (nf _таблицы))
  • Чтобы обойти это, мы можем использовать цельCONNMARK, которая помечает все пакеты соединения произвольным 32 -битным целым числом на стороне PREROUTING, а затем сопоставляет ту же метку с коннмаркой . модуль на стороне ВЫХОД.
0
18.03.2021, 22:29

Теги

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