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:
Als "result" sollte eigentlich die NETZ-ID herauskommen, allerdings scheint die Zeile, in der die Berechnung stattfindet den Fehler auszulösen.
Gruß
peace_maker
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:
Gruß
peace_maker
Der ursprüngliche Fehler wurde gefunden
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.
Gruß
peace_maker
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
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