Bash Shell-Skript zum Umwandeln von IP Adressen

Auf der Seite von Nirsoft (haben auch sonst tolle Tools!) gibt es als CSV Datei die IP Adressen aus z.B. Deutschland: http://www.nirsoft.net/countryip/de.html

In der CSV Datei haben die Zeilen folgende Syntax:

2.160.0.0,2.175.255.255,1048576,28/09/10,Telekom Deutschland GmbH

Ich wollte aber “allow from 2.160” “allow from 2.161” … “allow from 2.175″ haben.

Das bewerkstelligt das Skript hier drunter.

Aufruf ist dann <Skript> de.csv > /tmp/allow_from_de

#!/bin/bash

#d Extrahiert aus de.csv die IP bereiche und wandelt die in um.
#d Vorher: 88.198.0.0,88.199.0.0,4096
#d Nachher: 88.198

## 1.0, 16.1.17 Upuetz, muon IT

[ $DEBUG ] && set -x

#d Zuorden # zu 2^Faktor
array[2]=1
array[4]=2
array[8]=3
array[16]=4
array[32]=5
array[64]=6
array[128]=7
array[256]=8
array[512]=9
array[1024]=10
array[2048]=11
array[4096]=12
array[8192]=13
array[16384]=14
array[32768]=15
array[65536]=16
array[131072]=17
array[262144]=18
array[524288]=19
array[1048576]=20
array[2097152]=21
#d Zeilenweise aus der uebergebenen Datei lesen
DATEI=$1
IFS=”

for ZEILE in $(cat $DATEI)
do
#d Syntax: ip,ip,#,Besitzer
#d 1. Spalte und 3. auslesen
IFS=”,”
set — $ZEILE
IP=$1
ANZAHL=$3
#d Anzahl -> Faktor
FAKTOR=${array[$ANZAHL]}

#d Wenn >3, letzte Stelle abschneiden. Wenn >7, noch eine Stelle abschneiden
if [ $FAKTOR -gt 7 ]
then
IP=${IP%.*}
BASIS=8
fi
if [ $FAKTOR -gt 15 ]
then
IP=${IP%.*}
BASIS=16
fi
if [ $FAKTOR -gt 23 ]
then
IP=${IP%.*}
BASIS=24
fi
#d 4-x, 8-x, 12-x mal die letzte Stelle hochzaehlen
COUNT=$(echo “2^$((FAKTOR-BASIS))” | bc)
LAST=${IP##*.}
while [ $COUNT -gt 0 ]
do
#d die Zeilen ausgeben
echo -n “allow from ${IP%.*}”
echo “.$LAST”
COUNT=$((COUNT-1))
LAST=$((LAST+1))
done
done