ipset-whitelist-corn
#!/bin/bash
function log2 {
local x=0
for (( y=$1-1 ; $y > 0; y >>= 1 )) ; do
let x=$x+1
done
echo $x
}
MAILTO='example@example.jp'
DATAURL='http://ftp.apnic.net/stats/apnic/delegated-apnic-extended-latest'
ROOTDIR='/root/ipset'
WHITELIST_LABEL='WHITELIST'
LOG_FILENAME="${ROOTDIR}/${WHITELIST_LABEL}.log"
HISTORY_LOG=${ROOTDIR}/history_log
IPSET='/sbin/ipset'
mkdir -p ${ROOTDIR}
${IPSET} create -exist ${WHITELIST_LABEL} hash:net
WHITELIST_FILENAME="${ROOTDIR}/${WHITELIST_LABEL}.ipset"
date >>${LOG_FILENAME}
[ -e ${WHITELIST_FILENAME} ] \
&& awk '{print $3}' ${WHITELIST_FILENAME}|sort|uniq|egrep '^[0-9]' \
> ${WHITELIST_FILENAME}.before
curl -s ${DATAURL} \
| grep JP \
| grep ipv4 \
| while read r; do
IPNUM=$(echo $r|cut -d\| -f5)
BIT=$(log2 ${IPNUM})
echo $(echo $r|cut -d\| -f4)/$(expr 32 - ${BIT})
done \
> ${WHITELIST_FILENAME}.tmp
[ ! -s ${WHITELIST_FILENAME}.tmp ] \
&& echo "${WHITELIST_FILENAME}.tmp is empty!!" \
&& exit 1
cat <<EOL >> ${WHITELIST_FILENAME}.tmp
EOL
cat ${WHITELIST_FILENAME}.tmp|sort|uniq|egrep '^[0-9]' \
> ${WHITELIST_FILENAME}.after
[ ! -e ${WHITELIST_FILENAME}.before ] \
&& touch ${WHITELIST_FILENAME}.before
diff ${WHITELIST_FILENAME}.before ${WHITELIST_FILENAME}.after \
| egrep '^(>|<)' \
| while read r; do
echo $(echo $r|sed -e "s/</del ${WHITELIST_LABEL}/" -e "s/>/add ${WHITELIST_LABEL}/")
${IPSET} $(echo $r|sed -e "s/</del ${WHITELIST_LABEL}/" -e "s/>/add ${WHITELIST_LABEL}/")
done 2>&1 \
| tee -a ${LOG_FILENAME} \
| mail -s ipset_update_mail-parknet-ne-jp ${MAILTO} >> ${LOG_FILENAME} 2>&1
mkdir -p ${HISTORY_LOG}
mv ${WHITELIST_FILENAME} ${HISTORY_LOG}/${WHITELIST_LABEL}.ipset.$(date '+%Y-%m-%d-%H-%M')
${IPSET} save ${WHITELIST_LABEL} > ${WHITELIST_FILENAME}
exit 0