日本に割り当てられてる IP address

日本に割り当てられてる 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

See Also

Copyright © 髭。/ Hugo + hugo-book