Am 13.07.2010 06:40, schrieb Reiner Klaproth:
Hallo!
Mein erster Vorschlag: Auf die erzeugte Datei mit der Ausgabe von awk noch mal grep anzuwenden (also grep '10.129.4.128' $file ...)
grep hatte ich verworfen, weil es u.U. fehlerhaft auf z.B. 192.168.0.10 zutreffen könnte, wenn nach 192.168.0.1 gesucht wird und auf das Suchmuster bei der in der config ebenfalls vorhandenen Source-IP treffen könnte. Denkfehler meinerseits war, daß ich die gesuchte IP ja auch mit einem / abschließen könnte, der ja auf jeden Fall folgt. Das Problem mit der Src-IP hätte sich mit der richtigen Reihenfolge gelöst.
Der Ansatz von Grimnin ist natürlich eleganter und etwa das von mir gesuchte. Der Suchbegriff wurde mit ihm zum LUG-Treffen noch um den / vervollständigt und damit war die Lösung komplett.
ID=$( awk -F , '($2 == "on" && $13 ~/^'$CONN'//) {print $1}' $CONFIG )
liefert mir jetzt die gewünschte Information.
Für eine Suche mit grep wäre dagegen folgendes nötig gewesen: ID=$( awk -F , '($2 == "on") {printf "%s %s\n" $1, $13}' $CONFIG | \ grep "$CONN/" | awk '{print $1}' )
Der andere: awk kann Variablen mitnehmen, wenn man das deklariert. awk -F, -v conn=$CONN ... Dann lässt sich der Vergleich so etwa durchziehen, wie du es beschrieben hast.
Interessante Möglichkeit, aber diese verschachtelten awk-Aufrufe wollte ich nicht wirklich haben ;-) Ich hatte nur die awk-Beispielskripte nicht verstanden, in denen mehrere awk-Befehle nacheinander abgearbeitet werden.
Dummerweise hat sich nach 2 Tagen Einsatz gezeigt, daß nicht grundsätzlich nur die bei 'ipsec eroute' gelisteten [HOLD|TRAP]-Verbindungen (also !=tun*) betroffen sind, sondern manchmal zur betroffenen Verbindung kein Eintrag mehr vorhanden ist oder (30 min) nach einer Zwangstrennung + neue DynIP immer noch "=> tun0x1004@<OLD_IP>:0" drin steht.
Dead Peer Detection funktioniert hier anscheinend überhaupt nicht.
Aber jetzt bin ich wenigstens wieder um einiges schlauer. :-)
Gruß Rico