История изменений
Исправление 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