sed で携帯の IP アドレスリストを作る
sed だけでほとんどやっつけてみたいということで。
コマンドラインから無理やり携帯の IP アドレスリストを取得してみた。
各社のウェブサイトに curl でアクセスして HTML をいじるので、リニューアルされたら即アウト。
「今のところ取れる」というだけの話。ナマモノのようだ。
DoCoMo
リストになっているところから IP アドレスっぽいのを抜き出した。
curl $DOCOMO_URL | sed -n '/^.*<li>\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\/[0-9]\{1,3\}\)<\/li>.*$/{s//\1/;p}' > docomo.lst
ezweb
IP アドレスとサブネットマスクで 2 行で書かれていたので、後で N コマンドでくっつけた。
パイプで渡しているのでイマイチかもしれない。
curl $EZWEB_URL | sed -n '/^.*<div.*>\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)<\/div>.*/,/^.*<div.*>\(\/[0-9]*\)<\/div>.*/{s//\1/;p}' | sed '/^[0-9].*$/N;s/\n//' > ezweb.lst
SoftBank
テーブルの中に入ってたので抜き出した。
curl $SOFTBANK_URL | sed -n '/^.*">\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)\(\/[0-9]*\).*/{s//\1\3/;p}' > softbank.lst
WILLCOM
改行コードを変換する sed を一つ入れた。
curl $WILLCOM_URL | sed 's/\r/\n/g' | sed -n '/^<td.*">\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\/[0-9]*\).*/{s//\1/;p}' > willcom.lst
.htaccess を作る
awk と組み合わせて、携帯から以外のアクセスを拒否する .htaccess も作ってみた。
# アクセスルール
cat << EOS > .htaccess
order deny,allow
deny from all
EOS
# DoCoMo
curl $DOCOMO_URL | sed -n '/^.*<li>\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\/[0-9]\{1,3\}\)<\/li>.*$/{s//\1/;p}' | awk 'NR==1{print "# docomo"}{print "allow from " $0}END{print ""}' >> .htaccess
# ezweb
curl $EZWEB_URL | sed -n '/^.*<div.*>\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)<\/div>.*/,/^.*<div.*>\(\/[0-9]*\)<\/div>.*/{s//\1/;p}' | sed '/^[0-9].*$/N;s/\n//' | awk 'NR==1{print "# ezweb"}{print "allow from " $0}END{print ""}' >> .htaccess
# SoftBank
curl $SOFTBANK_URL | sed -n '/^.*">\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)\(\/[0-9]*\).*/{s//\1\3/;p}' | awk 'NR==1{print "# softbank"}{print "allow from " $0}END{print ""}' >> .htaccess
# WILLCOM
curl $WILLCOM_URL | sed 's/\r/\n/g' | sed -n '/^<td.*">\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\/[0-9]*\).*/{s//\1/;p}' | awk 'NR==1{print "# willcom"}{print "allow from "$0}' >> .htaccess
かなり見にくくなった。