日本に割り当てられてる IP address #
最近話題の IP v4 枯渇とかとは全く関係なし
sshd への接続制限をするのに、何をどんなふうに制限するかねぇ。。。という話の過程で、とりあえず日本限定とかしたい時のために一覧取得
諸事情により bash だけど、普段使い慣れんもん使って無理にやるより、使い慣れた Perl でシンプルに書くほうが幸せだったかもね
あと、諸事情により bash なので、計算させるの面倒で、サブネットマスクとか 33 パターン分岐です。どうせ年に一回も使わんから、動けばいいんだよ
#!/bin/bash
SUBNET=$1
function _split() {
local IFS='|'
SPLIT_VAL=($1)
}
function _bit() {
d=$1
m=0
b=''
if [ $d == 256 ];then
m=24
elif [ $d == 65536 ];then
m=16
elif [ $d == 16777216 ];then
m=8
else
# d2b
while [ $d != 0 ];do
b=$(($d%2))$b
d=$(($d/2))
done
# m=$((32 - $((${#b}-1))));
m=$((33-${#b}))
fi
if [ $SUBNET ]; then
case $m in
'32') m='255.255.255.255';;
'31') m='255.255.255.254';;
'30') m='255.255.255.252';;
'29') m='255.255.255.248';;
'28') m='255.255.255.240';;
'27') m='255.255.255.224';;
'26') m='255.255.255.192';;
'25') m='255.255.255.128';;
'24') m='255.255.255.0';;
'23') m='255.255.254.0';;
'22') m='255.255.252.0';;
'21') m='255.255.248.0';;
'20') m='255.255.240.0';;
'19') m='255.255.224.0';;
'18') m='255.255.192.0';;
'17') m='255.255.128.0';;
'16') m='255.255.0.0';;
'15') m='255.254.0.0';;
'14') m='255.252.0.0';;
'13') m='255.248.0.0';;
'12') m='255.240.0.0';;
'11') m='255.224.0.0';;
'10') m='255.192.0.0';;
'9') m='255.128.0.0';;
'8') m='255.0.0.0';;
'7') m='254.0.0.0';;
'6') m='252.0.0.0';;
'5') m='248.0.0.0';;
'4') m='240.0.0.0';;
'3') m='224.0.0.0';;
'2') m='192.0.0.0';;
'1') m='28.0.0.0';;
'0') m='0.0.0.0';;
esac
fi
echo $m;
}
for line in `curl http://ftp.apnic.net/stats/apnic/delegated-apnic-latest 2>/dev/null | fgrep 'apnic|JP|ipv4'|cut -d '|' -f 4,5`;do
_split $line;
for i in ${SPLIT_VAL[@]};do
#if [[ "$i" =~ \\. ]] ;then
if [ $(echo $i|grep '\.') ]; then
echo -n "${i}/";
else
_bit $i
fi
done
done