[ SHELL ] NETZ-ID Script

peace_maker

Cadet 4th Year
Registriert
Dez. 2010
Beiträge
111
Hallo liebe CB-Gemeinde,
ich bin gerade dabei mir ein Shell script zu basteln, dass diverse Netzwerk Operationen durchführen kann (nmap, aircrack-ng, airmon-ng, Network Manager etcv.). Sobald das fertig ist, werd ich es auf pastebin hochladen und verlinken. Im Augenblick jedoch hänge an einer kleinen Stelle fest.

Ich würde gerne die NETZ-ID durch eine Bitweise UND-Verknüpfung ausrechnen jedoch hat sich bei mir wohl irgendwo der Fehlerteufel eingeschlichen. Falls ihr Fehler findet oder Angregungen habt, wie man den Code noch schlanker machen kann teilt dies mir bitte mit.

Es folgt ein kleiner Codeausschnitt, in dem der Fehler sein muss:

Code:
ip=`ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed 's/[a-zA-Z]//g' | awk -F ':' '{print $2 }'`
mask=`ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed 's/[a-zA-Z]//g' | awk -F ':' '{print $4 }'`

oldIFS=$IFS

for i in {0..3} 
do
    (( result[i] = ip[i] & mask[i] ))
done
echo "${result[*]}"

IFS=$oldIFS

Als "result" sollte eigentlich die NETZ-ID herauskommen, allerdings scheint die Zeile, in der die Berechnung stattfindet den Fehler auszulösen.

Gruß
peace_maker
Ergänzung ()

Warum auch immer der IFS bei der For-Schleife nicht gegriffen hat ist mir ein Rätsel aber ich hab mir jetzt einfach eine sehr sehr umständliche Lösung zusammengekleistert..für jeden den es interessiert:

Code:
ip=`ifconfig | grep "inet addr:" | \
grep -v 127.0.0.1 | \
sed 's/[a-zA-Z]//g' | awk -F ':' '{print $2 }'`
 
mask=`ifconfig | grep "inet addr:" |\
grep -v 127.0.0.1 | sed 's/[a-zA-Z]//g' | \
awk -F ':' '{print $4 }'`
 
oldIFS=$IFS
 
while IFS="." read Ieins Izwei Idrei Ivier
 
do
 
    while IFS="." read Meins Mzwei Mdrei Mvier
 
    do
 
  
 
            result=$(($Ieins&$Meins)).$(($Izwei&$Mzwei)).$(($Idrei&$Mdrei))\
            .$(($Ivier&$Mvier))
 
 
    done <<<"$mask"  
  
done <<<"$ip"
echo "$result"
IFS=$oldIFS

Gruß
peace_maker
Ergänzung ()

Der ursprüngliche Fehler wurde gefunden :rolleyes:

Das Problem war, dass ich natürlich mit einem Array arbeiten wollte, sprich die variable $ip und $mask nacheinander mit den einzelnen Oktetten der IPv4 Adressen füllen um dann durch eine UND-Verknüpfung letztendlich die Netz_ID berechnen zu können.
Allerdings hatte ich einen Denkfehler in der Befüllung der Variablen $ip und $mask. Im Endeffekt war die gesamte Adresse in ip[0] bzw. mask[0] gespeichert und nicht wie geplant ip[0]=192 ip[1]=168 ip[3]=178 etc..

Behoben wurde der Fehler dann druch das verschieben des IFS vor die Befüllung der Variablen und eine zusätzliche Klammer, die den Befehl umschließt. Dadurch arbeitet das IFS nun korrekt und verfüttert die IPv4 Adressen scheibchenweise an den Befüllungsbefehl.

Code:
oldIFS=$IFS
IFS=.

ip=(`ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed 's/[a-zA-Z]//g' | awk -F ':' '{print $2 }'`)
mask=(`ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed 's/[a-zA-Z]//g' | awk -F ':' '{print $4 }'`) 

for i in {0..3}; do
        (( result[i] = ip[i] & mask[i] ))
done   
for i in {0..3}; do
        (( mask_short += (mask[i] + 1) / 32 ))
done 
net_ID="${result[*]}"
IFS=$oldIFS

nmap -sn "$net_ID/$mask_short"

Gruß
peace_maker
 
Zurück
Oben