Im Katalog suchen

Linux - Wegweiser für Netzwerker

Online-Version

Copyright © 2001 by O'Reilly Verlag GmbH & Co.KG

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches Linux - Wegweiser für Netzwerker oder wollen Sie es bestellen, dann klicken Sie bitte hier.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel



Verwendung von dip

Nun, das war ja alles ziemlich einfach. Nichtsdestotrotz wollen Sie wahrscheinlich die obigen Schritte so automatisieren, daß Sie nur einen einzigen Befehl eingeben müssen, der dann all die oben aufgeführten Befehle durchführt, wie die Einwahl in den Provider, das Einloggen, die Einstellung des richtigen SLIP-Betriebsmodus sowie die Konfiguration der Netzwerkschnittstelle. Genau das erledigt dip.

dip steht für Dialup IP. Es wurde von Fred van Kempen geschrieben und von einer Vielzahl von Leuten “gepatcht”. Heute wird zumeist nur noch eine bestimmte Version benutzt: dip337p-uri, das in den meisten Linux-Distributionen enthalten ist und vom FTP-Archiv auf metalab.unc.edu heruntergeladen werden kann.

dip bietet einen Interpreter für eine einfache Skriptsprache, mit der Sie Ihr Modem steuern, Leitungen in den SLIP-Modus schalten und die Schnittstellen konfigurieren können. Die Skriptsprache ist mächtig genug, um für die meisten Anwendungsfälle auszureichen.

Um das SLIP-Interface konfigurieren zu können, benötigt dip Root-Privilegien. Es wäre nun sehr verlockend, das setuid-Bit von dip zu setzen, so daß alle Benutzer einen SLIP-Server anwählen können, ohne Root-Rechte zu besitzen. Das ist aber sehr gefährlich, weil die fehlerhafte Einrichtung von Interfaces und Default-Routen mit dip das Routing auf Ihrem Netzwerk zum Erliegen bringen könnte. Noch schlimmer ist aber die Tatsache, daß Sie Ihren Benutzern auf diese Weise die Möglichkeit geben, Verbindungen zu jedem SLIP-Server aufzubauen, und so gefährliche Angriffe auf Ihr Netzwerk provozieren könnten. Wenn Sie es Ihren Benutzern also erlauben wollen, SLIP-Verbindungen aufzubauen, sollten Sie kleine Programme für jeden vorgesehenen SLIP-Server schreiben, die dip dann mit dem entsprechenden Skript aufrufen, das die Verbindung sauber aufbaut. Sorgfältig geschriebene Programme können dann bedenkenlos mit Setuid auf root gesetzt werden.1 Eine alternative und flexiblere Möglichkeit, vertrauenswürdigen Benutzern Root-Rechte für dip zu gewähren, besteht in der Anwendung von Programmen wie beispielsweise sudo.

Ein Beispielskript

Nehmen wir an, daß cowslip der Host ist, zu dem Sie die SLIP-Verbindung aufbauen wollen, und daß Sie für dip ein Skript namens cowslip.dip geschrieben haben, das die Verbindung herstellt. Wir starten dip und übergeben den Skriptnamen als Argument:

# dip cowslip.dip 
DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93) 
Written by Fred N. van Kempen, MicroWalt Corporation. 
connected to cowslip.moo.com with addr 192.168.5.74 
#

Das Skript selbst ist in Tabelle 7.1 zu sehen.

Beispiel 7.1: dip-Beispielskript

# dip-Beispielskript zur Anwahl von cowslip 
# setze lokale und entfernte Namen/Adressen 
        get $local vlager-slip 
        get $remote cowslip 
        port ttyS3               # wähle seriellen Port 
        speed 38400              # Geschwindigkeit auf Maximum 
        modem HAYES              # setze Modemtyp 
        reset                    # Modem und TTY zurücksetzen 
        flush                    # Eingabepuffer leeren 
# Einwahl vorbereiten 
        send ATQ0V1E1X1\r 
        wait OK 2 
        if $errlvl != 0 goto error 
        dial 41988 
        if $errlvl != 0 goto error 
        wait CONNECT 60 
        if $errlvl != 0 goto error 
# nun sind wir verbunden 
        sleep 3 
        send \r\n\r\n 
        wait ogin: 10 
        if $errlvl != 0 goto error 
        send Svlager\n 
        wait ssword: 5 
        if $errlvl != 0 goto error 
        send knockknock\n 
        wait running 30 
        if $errlvl != 0 goto error 
# wir sind eingeloggt, und die andere Seite setzt SLIP auf 
        print Connected to $remote with address $rmtip 
        default                  # dieser Link ist die Default-Route 
        mode SLIP                # wir wechseln nun auch in den SLIP-Modus 
# im Fehlerfall hierhin verzweigen 
error: 
        print SLIP to $remote failed.

Nachdem die Verbindung zu cowslip steht und SLIP aktiviert ist, trennt sich dip vom Terminal ab und geht in den Hintergrund. Sie können dann die normalen Netzwerkdienste über den SLIP-Link benutzen. Um die Verbindung zu beenden, rufen Sie einfach den dip-Befehl mit der Kommandozeilenoption –k auf. Dadurch wird ein Hangup-Signal an dip gesendet, wobei die Prozeß-ID verwendet wird, die dip in der Datei /etc/dip.pid eingetragen hat:

# dip -k

Bei der von dip zur Verfügung gestellten Skriptsprache bezeichnen Schlüsselwörter, denen ein Dollarzeichen vorangestellt ist, immer einen Variablennamen. dip besitzt eine ganze Reihe vordefinierter Variablen, die nachfolgend noch aufgeführt werden. Beispielsweise enthalten $remote und $local die Hostnamen der für den SLIP-Link verwendeten entfernten bzw. lokalen Hosts.

In den ersten beiden Befehlszeilen im Beispielskript werden get-Befehle verwendet, mit denen bei dip Variablen gesetzt werden. In diesem Fall werden der entfernte und der lokale Hostname auf vlager bzw. cowslip gesetzt.

In den nächsten fünf Befehlszeilen werden die Terminalleitung und das Modem eingerichtet. reset sendet einen Reset-String an das Modem (bei Hayes-kompatiblen Modems ist dies der ATZ-Befehl).Der nächste Befehl leert den Eingabepuffer, so daß der Login-Dialog korrekt funktionieren kann. Dieser Dialog ist ziemlich simpel: dip wählt einfach 41988, die Telefonnummer von cowslip, und loggt sich unter dem Account Svlager mit dem Paßwort knockknock ein. Der wait-Befehl veranlaßt dip, auf die Zeichenkette zu warten, die als erstes Argument übergeben wurde. Das zweite Argument bestimmt die Zeit, die auf diese Zeichenkette gewartet werden soll. Die in die Login-Prozedur eingestreuten if-Befehle prüfen, ob während der Ausführung irgendwelche Fehler aufgetreten sind.

Die nach dem Einloggen noch verbleibenden Befehle sind default, der den SLIP-Link als Default-Route für alle Hosts definiert, und mode, der den SLIP-Modus für diese Leitung aktiviert und das Interface und die Routing-Tabelle für Sie konfiguriert.

dip-Referenz

Dieser Abschnitt enthält eine Referenz der meisten dip-Befehle. Sie erhalten eine Übersicht aller Befehle, indem Sie dip im Testmodus starten und dann den help-Befehl eingeben. Um etwas zur Syntax eines Befehls zu erfahren, geben Sie den Befehl einfach ohne weitere Argumente ein (was natürlich bei Befehlen, die keine zusätzlichen Argumente benötigen, nicht funktioniert). Das folgende Beispiel illustriert den help-Befehl:

# dip -t 
DIP: Dialup IP Protocol Driver version 3.3.7p-uri (25 Dec 96) 
Written by Fred N. van Kempen, MicroWalt Corporation. 
Debian version 3.3.7p-2 (debian).  

DIP> help 
DIP knows about the following commands: 

        beep         bootp        break        chatkey      config 
        databits     dec          default      dial         echo 
        flush        get          goto         help         if 
        inc          init         mode         modem        netmask 
        onexit       parity       password     proxyarp     print 
        psend        port         quit         reset        securidfixed 
        securid      send         shell        skey         sleep 
        speed        stopbits     term         timeout      wait  
DIP> echo 
Usage: echo on|off 
DIP>

Im gesamten folgenden Abschnitt zeigen die Beispiele, bei denen der DIP>-Prompt auftaucht, wie Sie einen Befehl im Testmodus eingeben müssen und welche Ausgabe dieser Befehl dann erzeugt. Fehlt dieser Prompt, sollten Sie die Beispiele als Auszüge von Skripten betrachten.

Modembefehle

dip stellt eine ganze Reihe von Befehlen zur Verfügung, mit denen Sie Ihre serielle Leitung und Ihr Modem konfigurieren können. Die Funktion ist bei einigen Befehlen offensichtlich; beispielsweise wählt port den zu verwendenden Port aus. Weitere solche Befehle sind speed, databits, stopbits und parity, mit denen Sie die gängigen Parameter der Leitung einstellen können.Mit dem modem-Befehl können Sie den aktuellen Modemtyp wählen. Momentan ist HAYES (in Großbuchstaben!) der einzig unterstützte Typ. Sie müssen dip den Modemtyp bekanntgeben, weil es sonst die Ausführung der Befehle dial und reset verweigert. Der Befehl reset sendet einen Reset-String an das Modem. Dieser String ist vom verwendeten Modem abhängig. Bei Hayes-kompatiblen Modems lautet dieser String ATZ.

Mit dem flush-Befehl werden alle noch im Eingabepuffer befindlichen Antworten des Modems verworfen. Andernfalls könnte das einem reset folgende Dialogskript verwirrt sein, weil es die OKs früherer Befehle vorfinden würde.

Mit dem init-Befehl wählen Sie einen Initialisierungsstring, der an das Modem geschickt wird, bevor gewählt wird. Die Standardeinstellung für Hayes-Modems lautet ATE0 Q0 V1 X1, womit die Ausgabe (Echo) von Befehlen und langen Ergebniscodes sowie die “Blindwahl” (keine Prüfung des Wähltons) aktiviert wird. Die meisten Modems sind bereits korrekt voreingestellt, so daß diese Vorbereitungen eigentlich nicht notwendig sind, wenn sie auch nicht weiter schaden.

Schließlich sendet der dial-Befehl einen Initialisierungsstring an das Modem und wählt den Remote-Rechner an. Der Standard-Wählbefehl für Hayes-Modems lautet ATD.

Der echo-Befehl

Der echo-Befehl dient als Debugging-Hilfe. Mit echo on werden von dip alle an das serielle Gerät geschickten Daten auch auf der Konsole ausgegeben. Diese Option können Sie mit dem Befehl echo off wieder abschalten.

dip erlaubt Ihnen, den Skriptmodus kurzfristig zu verlassen und den Terminalmodus zu verwenden. In diesem Modus arbeitet dip wie ein normales Terminalprogramm, das Daten an die serielle Leitung schickt und von ihr liest. Mit Strg-] setzen Sie die Abarbeitung der Skripten fort.

Der get-Befehl

Mit dem Befehl get können Sie Variablen für dip setzen. Die einfachste Form ist, eine Variable auf einen konstanten Wert zu setzen, wie wir das bei cowslip.dip getan haben. Darüber hinaus können Sie aber auch Eingaben vom Benutzer anfordern, indem Sie das Schlüsselwort ask anstelle eines Wertes angeben:

DIP> get $local ask 
Enter the value for $local: _

Eine dritte Möglichkeit ist der Versuch, den Wert vom entfernten Host zu erhalten. So seltsam das auf den ersten Blick auch erscheinen mag, so nützlich ist es in manchen Fällen. Manche SLIP-Server erlauben Ihnen nicht die Verwendung einer eigenen IP-Adresse für den SLIP-Link, sondern weisen Ihnen beim Einwählen eine Adresse aus einem Adreß-Pool zu, wobei Sie eine Meldung erhalten, welche Adresse Ihnen zugewiesen wurde. Wenn die Nachricht in etwa die folgende Form hat: Your address: 192.168.5.74, können Sie mit den folgenden Befehlszeilen Ihre Adresse ermitteln:

# finish login 
wait address: 10 
get $locip remote

Der print-Befehl

Mit diesem Befehl können Sie Texte auf die Konsole ausgeben, von der aus dip gestartet wurde. Die von dip verwendeten Variablen können in print-Befehlen verwendet werden:

DIP> print Using port $port at speed $speed 
Using port ttyS3 at speed 38400

Variablennamen

dip versteht nur eine Reihe vordefinierter Variablen. Ein Variablenname beginnt immer mit einem Dollarzeichen und muß in Kleinbuchstaben geschrieben werden.

Die Variablen $local und $locip enthalten den lokalen Hostnamen und die IP-Adresse. Wenn Sie den kanonischen Hostnamen in $local speichern, versucht dip automatisch, diese Hostadresse zu einer IP-Adresse aufzulösen, und speichert diese in $locip. Analog geht es auch beim Setzen von $locip vonstatten. In diesem Fall versucht dip eine umgekehrte Adreßauflösung und speichert den ermittelten Hostnamen in der Variable $local.

Die Variablen $remote und $rmtip speichern die entsprechenden Angaben für den entfernten Host. $mtu enthält den MTU-Wert dieser Verbindung.

Diese fünf Variablen sind die einzigen, denen Sie mit get direkt Werte zuweisen können. Eine Reihe anderer Variablen werden nur über spezielle gleichlautende Befehle gesetzt, können aber mittels print-Befehlen ausgegeben werden: $modem, $port und $speed.

$errlvl ist die Variable, mit der Sie auf das Resultat des zuletzt ausgeführten Befehls zugreifen können. Ist der Wert null, ist die Operation erfolgreich durchgeführt worden, bei einem Wert ungleich null ist ein Fehler aufgetreten.

Die if- und goto-Befehle

Der Befehl if verursacht lediglich eine bedingte Verzweigung und ist nicht mit dem if einer vollwertigen Programmiersprache vergleichbar. Die Syntax lautet:

if var op number goto label

Der Ausdruck darf nur ein einfacher Vergleich zwischen einer der Variablen $errlvl, $locip und $rmtip sein. var muß eine ganze Zahl sein. Der Operator op steht für ==, !=, <, >, <= oder >=.

Mit dem goto-Befehl wird die Ausführung des Skripts in der Zeile fortgesetzt, die dem label folgt. Ein Label muß an der ersten Stelle einer Zeile beginnen, und es muß ihm unmittelbar ein Doppelpunkt folgen.

send, wait und sleep

Diese Befehle helfen bei der Implementierung einfacher Dialogskripten unter dip. send überträgt seine Argumente an die serielle Leitung. Variablen werden nicht unterstützt, wohl aber C-ähnliche Backslash-Sequenzen wie \n (Newline) und \b (Backspace). Das Tildezeichen (~) wird als Abkürzung für die Zeichenkombination Wagenrücklauf/Newline verwendet.

wait akzeptiert ein Wort als Argument und liest die Eingaben von der seriellen Schnittstelle, bis es dieses Wort findet. Das Wort selbst darf keine Leerzeichen enthalten. Optional können Sie wait einen Timeout-Wert (in Sekunden) als zweites Argument übergeben. Wird das gewünschte Wort nicht innerhalb dieser Zeit gefunden, bricht der Befehl ab und setzt die Variable $errlvl auf eins. Dieser Befehl wird zur Erkennung von Login- und anderen Prompts verwendet.

Mit dem sleep-Befehl können Sie die weitere Befehlsausführung für eine bestimmte Zeit anhalten, beispielsweise um das Ende einer Login-Sequenz abzuwarten. Auch bei diesem Befehl wird die zu wartende Zeit in Sekunden angegeben.

mode und default

Diese Befehle werden verwendet, um die serielle Leitung in den SLIP-Modus zu schalten und das Interface zu konfigurieren.

mode ist der letzte Befehl, der von dip ausgeführt wird, bevor es in den Dämonmodus wechselt. Wenn kein Fehler auftritt, kehrt der Befehl nicht zurück.

mode erwartet einen Protokollnamen als Argument. dip akzeptiert momentan SLIP, CSLIP, SLIP6, CSLIP6, PPP und TERM als gültige Werte. Leider kann die derzeitige Version von dip noch nicht mit adaptivem SLIP umgehen.

Nachdem der SLIP-Modus für die serielle Leitung aufgesetzt wurde, führt dip den Befehl ifconfig aus, um das Interface als Punkt-zu-Punkt-Verbindung zu konfigurieren. Danach wird noch route gestartet, um die Route zum entfernten Host einzurichten.

Wenn das Skript vor dem mode-Befehl noch den default-Befehl ausführt, dann erzeugt dip eine Default-Route, die auf diesen SLIP-Link zeigt.




1.

diplogin muß auch als Setuid root ausgeführt werden. Beachten Sie die Hinweise im letzten Abschnitt dieses Kapitels.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel


Weitere Informationen zum Linux - Wegweiser für Netzwerker

Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center


O'Reilly Home|O'Reilly-Partnerbuchhandlungen|Bestellinformationen
Kontakt|Über O'Reilly|Datenschutz

© 2001, O'Reilly Verlag