для начала -- из range в cidr представление:
использование:
и сама функция:
использование:
function range2cidr () {
if [[ $# == 3 && $2 == "-" ]]; then
perl -MNet::CIDR::Lite -le '$cidr = Net::CIDR::Lite->new(@ARGV); print join "\n",$cidr->list' $1-$3
else
perl -MNet::CIDR::Lite -le '$cidr = Net::CIDR::Lite->new(@ARGV); print join "\n",$cidr->list' $1
fi
return $!
}
использование:
# range2cidr 123.144.0.0 - 123.147.255.255
123.144.0.0/14
# range2cidr 123.144.0.0-123.147.255.255
123.144.0.0/14
#
и сама функция:
function host2block () {
local i body="$( whois $1 )"
local ret=$( print "$body" | awk "/^ +Netblock:/ { print \$2 }" )
if [[ -n $ret ]]; then
print $ret
return
fi
for i in ${(f)"$( print "$body" | awk '/^inetnum:/ { print $2,"-",$4 }')"}; do
range2cidr "$i"
done
[[ -n $i ]] && return
print "$body"
return
}
использование:
# host2block 118.169.82.252
118.169.0.0/16
#