LINUX.ORG.RU

История изменений

Исправление vodz, (текущая версия) :

А вообще и в целом - bash это очень весело и круто.

Если бы ещё что-то было от bash в вашем скрипте. Если человеку надо сдать зачёт по bash, когда они изучили массивы и ~= regex, то вдруг выясняется, что все вот ваши grep+sort+uniq+awk делаются и на чистом bash и не сложно. Особенно с учётом, что sort для IP у вас всё равно не правильный.

#!/usr/bin/env bash

TRIG=10
declare -ai A
declare -i i o o2 o3
R='(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}'

u32ip() {
        local s
        for o in 1 2 3 4; do
                s='.'$((i%256))$s
                i=$((i>>8))
        done
        echo ${s:1}
}

while read l; do
        if [[ $l =~ $R ]]; then
                IFS=. read o o2 o3 i <<< ${BASH_REMATCH[0]}
                i+=$((o3*256+o2*256*256+o*256*256*256))
                A[i]+=1
        fi
done < filelog
while read i; do
        iptables -A INPUT -s $(u32ip)
done < <(for o in ${!A[*]}; do [[ A[o] -ge TRIG ]] && echo $o; done | sort -n)

Исправление vodz, :

А вообще и в целом - bash это очень весело и круто.

Если бы ещё что-то было от bash в вашем скрипте. Если человеку надо сдать зачёт по bash, когда они изучили массивы и ~= regex, то вдруг выясняется, что все вот ваши grep+sort+uniq+awk делаются и на чистом bash и не сложно. Особенно с учётом, что sort для IP у вас всё равно не правильный.

#!/usr/bin/env bash

TRIG=10
declare -ai A
declare -i i o o2 o3
R='(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}'

u32ip() {
        local s
        for o in 1 2 3 4; do
                s='.'$((i%256))$s
                i=$((i>>8))
        done
        echo ${s:1}
}

while read l; do
        if [[ $l =~ $R ]]; then
                IFS=. read o o2 o3 i <<< ${BASH_REMATCH[0]}
                i+=$((o3*256+o2*256*256+o*256*256*256))
                A[i]+=1
        fi
done < filelog
while read i; do
        iptables -A INPUT -s $(u32ip)
done < <(for i in ${!A[*]}; do [[ A[i] -ge TRIG ]] && echo $i; done | sort -n)

Исправление vodz, :

А вообще и в целом - bash это очень весело и круто.

Если бы ещё что-то было от bash в вашем скрипте. Если человеку надо сдать зачёт по bash, когда они изучили массивы и ~= regex, то вдруг выясняется, что все вот ваши grep+sort+uniq+awk делаются и на чистом bash и не сложно. Особенно с учётом, что sort для IP у вас всё равно не правильный.

#!/usr/bin/env bash

TRIG=10
declare -ai A
declare -i i o o2 o3
R='(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}'

u32ip() {
        local s
        for o in 1 2 3 4; do
                s='.'$((i%256))$s
                i=$((i>>8))
        done
        echo ${s:1}
}

while read l; do
        if [[ $l =~ $R ]]; then
                IFS=. read o o2 o3 i <<< ${BASH_REMATCH[0]}
                i+=$((o3*256+o2*256*256+o*256*256*256))
                A[i]+=1
        fi
done < filelog
readarray A < <(for i in ${!A[*]}; do [[ A[i] -ge TRIG ]] && echo $i; done | sort -n)
for i in ${A[*]}; do
        iptables -A INPUT -s $(u32ip) -j DROP
done

Исправление vodz, :

А вообще и в целом - bash это очень весело и круто.

Если бы ещё что-то было от bash в вашем скрипте. Если человеку надо сдать зачёт по bash, когда они изучили массивы и ~= regex, то вдруг выясняется, что все вот ваши grep+sort+uniq+awk делаются и на чистом bash и не сложно. Особенно с учётом, что sort для IP у вас всё равно не правильный.

#!/usr/bin/env bash

TRIG=10
declare -ai A
declare -i i o o2 o3
R='(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}'

u32ip() {
        local s
        for o in 1 2 3 4; do
                s='.'$((i%256))$s
                i=$((i>>8))
        done
        echo ${s:1}
}

while read l; do
        if [[ $l =~ $R ]]; then
                IFS=. read o o2 o3 i <<< ${BASH_REMATCH[0]}
                i+=$((o3*256+o2*256*256+o*256*256*256))
                A[i]+=1
        fi
done < filelog
readarray A < <(for i in ${!A[*]}; do [[ A[i] -ge TRIG ]] && echo $i; done | sort -n)
for i in ${A[*]}; do
        iptables -A INPUT -s $(u32ip)
done

Исходная версия vodz, :

А вообще и в целом - bash это очень весело и круто.

Если бы ещё что-то было от bash в вашем скрипте. Если человеку надо сдать зачёт по bash, когда они изучили массивы и ~= regex, то вдруг выясняется, что все вот ваши grep+sort+uniq+awk делаются и на чистом bash и не сложно. Особенно с учётом, что sort для IP у вас всё равно не правильный.

#!/usr/bin/env bash

TRIG=10
declare -ai A
declare -i i o o2 o3
R='(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}'

u32ip() {
        local s
        for o in 1 2 3 4; do
                s='.'$((i%256))$s
                i=$((i>>8))
        done
        echo ${s:1}
}

while read l; do
        if [[ $l =~ $R ]]; then
                IFS=. read o o2 o3 i <<< ${BASH_REMATCH[0]}
                i+=$((o3*256+o2*256*256+o*256*256*256))
                A[i]+=1
        fi
done < filelog
readarray A < <(for i in ${!A[*]}; do [[ A[i] -ge TRIG ]] && echo $i; done | sort -n)
for i in ${A[*]}; do
        iptables -A INPUT -s $(u32ip $i)
done