Получение списка IP-подсетей любой страны в формате CIDR

A- | A+

Для получения списка IP-подсетей любой страны в формате CIDR будем использовать GeoIP информацию, предоставляемую ресурсом www.maxmind.com.

Необходимо получить архив http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip, найти список IP-подсетей необходимой страны и преобразовать его в формат CIDR.

Скрипт для генерации файлов со списком IP-подсетей  в формате CIDR.

# Скрипт для получения файлов со списками IP подсетей стран в формате CIDR
# 24.05.2015
# 17.05.2016

#!/bin/sh -e

PATH=/sbin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

# Проверяем есть ли у нас доступ в Интернет
TEST_INET=`ping geolite.maxmind.com -c 1 -s 10 -W 2|grep -w "18 bytes from"|awk '{print $2}'` > /dev/null
# Сравниваем переменную, если не совпадёт то выйти из скрипта
if [[ !"$TEST_INET" == "bytes" ]]
then
echo `date` "Нет доступа к серверу MaxMind" >> $LOG
exit 0
fi

DIR="/etc/routing"
LOG="$DIR/geoip.log"

[ -f $DIR/GeoIPCountryCSV.zip ] || wget -T 5 -t 1 http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip

# Проверяем на целостность полученный архив
TEST_ZIP=`zip -T $DIR/GeoIPCountryCSV.zip |grep error`
# Если переменная не пуста то выходим
if [ "$TEST_ZIP" ]
then
echo `date` "Полученный zip архив битый" >> $LOG
exit 0
fi

# Список стран
AREA="\
CA	\
US	\
MX	\
"

for i in $AREA;
do
AREA2=$i
echo Arear: $AREA2
#----------------------------------------------------------
echo -n "Creating China CSV file..."
unzip -p $DIR/GeoIPCountryCSV.zip GeoIPCountryWhois.csv | grep -w "$AREA2" | awk -F \" '{print $10","$6","$8}' > $DIR/$AREA2.csv
echo -ne "DONE\nGenerating file..."
(for c in $(awk -F, '{print $1}' ${DIR}/$AREA2.csv | sort -u)
do
grep "^$c," $DIR/$AREA2.csv | awk -F, 'function s(b,e,l,m,n) {l = int(log(e-b+1)/log(2)); m = 2^32-2^l; n = and(m,e); if (n == and(m,b)) printf "%u.%u.%u.%u/%u \n",b/2^24%256,b/2^16%256,b/2^8%256,b%256,32-l; else {s(b,n-1); s(n,e)}} s($2,$3)'
done) > $DIR/$AREA2.cidr
#----------------------------------------------------------
done

rm -f $DIR/*.csv
rm -f $DIR/GeoIPCountryCSV.zip
echo "DONE"

Полученный список IP-подсетей в формате CIDR можно использовать для добавления маршрутов в таблицу маршрутизации или для правил IPTABLES.

Пример Bash скрипта для обработки файла со списком IP-подсетей в формате CIDR для добавления операторов до [$ACT1]  и после  [$ACT2] IP-подсети. Данный скрипт используется для добавления маршрутов в таблицу маршрутизации, аналогично можно прописать правила IPTABLES.

Если данный скрипт разместить в каталоге /etc/ppp/ip-up.d, то он будет автоматически запускаться при поднятии ppp интерфейса.

#!/bin/sh

PATH=/sbin:/bin:/usr/bin
set -e

US="/etc/routing/US.cidr"
CA="/etc/routing/CA.cidr"
MX="/etc/routing/MX.cidr"

METRIC="10"

# Проверяем передачу переменно с именем PPP интерфейса
if [ -n "$PPP_IFACE" ]; then

    # Если условие выполнено читаем посторочно файлы со списком подсетей CIDR и добавляем маршруты через PPP интерфейс
    cat $US $CA $MX | while read LINE
    do
    ip route add $LINE dev $PPP_IFACE metric $METRIC
    #echo $LINE
    done
fi

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>