Login mit REXX-Skript

Im Verzeichnis \tcpip\bin stehen einige Beispielskripte. Das bekannteste und Vater aller Modifizierungen ist ANNEX.CMD.

Wer sich ANNEX.CMD in den Editor lädt, sieht daß es in REXX geschrieben ist. Das hat den Vorteil, daß es beliebig erweitert werden kann. So ist es möglich, nach dem Besetztzeichen weitere Versuche zu starten oder, wenn mehrere Telefonnummern für den Server zur Verfügung stehen, alle durchzurufen, bis eine Verbindung zustandekommt.

Das Beispielskript ANNEX.CMD arbeitet mit Systemen, die nach dem Loginnamen und Passwort einen Prompt anbieten, auf dem 'slip' zum Starten eingegeben werden muß.

In das Feld Login Sequenz muß dann nur 'annex.cmd [atdtTelefonnummer] [Loginanme] [Passwort]' eingetragen werden. Sollte eine dieser Angaben fehlen, wird diese beim Start immer wieder abgefragt. Trägt man das Passwort ein, ist es auf der Festplatte lesbar gesichert. Wer das nicht möchte, läßt den Eintrag frei, beim Start wird er dann danach gefragt, dabei ist die Eingabe des Passwortes nicht auf dem Bildschirm zu sehen.

Mit diesen Angaben wird einmal versucht eine Verbindung aufzubauen. Die nach dem Kommando slip vom Server zugeteilte IP-Adresse wird vom Skript ausgelesen, wenn sie die Form Your Adress is hat. Danach wird der Rechner konfiguriert und SLIP meldet SLIP Driver Running. .... Jetzt können Internetdienstprogramme auf dem PC gestartet werden.

Aber leider haben nicht alle genau die Loginprozedur, die ANNEX.CMD durchlaufen wird. Deshalb noch einige Anmerkungen, wie das Skript angepaßt werden kann.

Muß vor dem Login noch ein Host angegeben werden, ist dieser erstmal dem Skript mitzuteilen. Das einfachste ist, das direkt reinzuschreiben. Im Editor wird die Stelle gesucht:

------------------------------------------------
/* Prompt for missing information*/
if dialcmd= '' then do
------------------------------------------------

Zwischen diese beiden Zeilen kann ein Eintrag erfolgen wie: host='slip'

Weiter unten im Skript ist dann die Unterhaltung der Rechner zu finden. 'call waitfor' bedeutet, daß der lokale Rechner auf die dahinter in '' angebenen Worte wartet.

----------------------------------------------------
call send cr
call waitfor 'Username:' ; call flush_receive 'echo'
call send username || cr
call waitfor 'Password:' ; call flush_receive 'echo'
call send password || cr
call waitfor '$'; call flush_receive 'echo'
call send 'slip'
----------------------------------------------------
Die Loginsequenz als REXX-Befehle (Ausschnitt aus der CMD)

Wird vor dem Loginnamen der host abgefragt, muß vor den Zeilen

call waitfor 'Username:' ; call flush_receive 'echo'
call send username || cr
ein Eintrag
call waitfor 'Host:' ; call flush_receive 'echo'
call send host || cr
stehen.

call send schickt dann auf die Frage nach dem Host, die oben in der Variablen host eingetragene Hosteingabe slip.

Die Unterhaltung der Rechner kann jetzt solange verlängert werden, bis vom Server SLIP gestartet wird. Das Schema ist immer das gleiche.

call waitfor 'Serverzeile'; call flush_receive 'echo'
wartet auf die als Serverzeile angebene Sequenz vom Server, call flush_receive 'echo' leert den Puffer für waitfor sobald die Sequenz angekommen.
call send 'response' || cr
sendet darauf an den Server die Sequenz response

Häufig wird die Adresse auch mit der Zeile

'SL/IP session from (156.34.145.2) to 156.34.155.15 beginning....'
mitgeteilt. Das vorliegende ANNEX.CMD kann damit nichts anfangen. Stattdessen muß aus dem ANNEX.CMD der folgende Abschnitt entfernt werden:
------------------------------------------------------------------------
/* Parse the results of the SLIP command to determine our address. */
/* We use the "waitfor_buffer" variable from the waitfor routine   */
/* to parse the stuff we get from the Annex after waiting for an   */
/* appropriate point in the data stream.                           */
call waitfor 'Your address is'
parse var waitfor_buffer . 'Annex address is' a '.' b '.' c '.' d '.'
.
annex_address = a||'.'||b||'.'||c||'.'||d

/* Now parse the remainder for our address */

call waitfor crlf parse var waitfor_buffer a '.' b '.' c '.' d '.' . os2_address = a||'.'||b||'.'||c||'.'||d

/* Flush anything else */ call flush_receive 'echo'

/* Now configure this host for the appropriate address, */ /* and for a default route through the Annex. */ -------------------------------------------------------------------------

Adressübergabe mit 'Your Adress is'

Dieser Teil kann dann ersetzt werden durch:

--------------------------------------------------------------------------
call waitfor 'SL/IP session'
/* My provider send the following string when I connect:
   SL/IP session from (156.34.145.2) to 156.34.155.15 beginning....
   The address in () is the address of the terminal server
   The address after the TO is my address
   Modify the 6 lines below to parse out the info provided by
   your provider
            */
            start_annex  = pos('(', remain_buffer) + 1
            end_annex    = pos(')', remain_buffer) - 1
            length_annex = end_annex - start_annex + 1
            start_os2  = pos('to', remain_buffer) + 3
            end_os2    = pos('begin', remain_buffer) - 2
            length_os2 = end_os2 - start_os2 + 1
            /* END OF WHAT THE USER MUST MODIFY FOR THEIR PROVIDER
            */

            annex_address = substr(remain_buffer, start_annex,
            length_annex)
            os2_address = substr(remain_buffer, start_os2, length_os2)
            /* Flush anything else */
            call flush_receive 'echo'
            /* Now configure this host for the appropriate address, */
            /* and for a default route through the Annex.           */
--------------------------------------------------------------------------
Adressübergabe durch SLIP/Session from ... to ... beginning (Skript von Colin Longman)

Diese beiden Arten, die Adresse dynamisch zu übergeben, sind glücklicherweise weit verbreitet. Es wird also oft nicht schwerer, als es so schon aussieht.

Die Fragen und nötigen Antworten beim Login bis zur erfolgreichen Herstellung einer Verbindung können durch ein manuelles Login herausgefunden werden. In \tcpip\etc muß eine Datei slip.cfg erzeugt werden.

-----------------------------------------------------------
interface sl0 {
 device=COM2,
 mtu=1006,
 compression=off
   }
------------------------------------------------------------
Inhalt der Datei SLIP.CFG

In einem OS/2-Fenster kann jetzt \tcpip\bin\slip.exe gestartet werden. Damit wird der SLIP-Treiber geladen. In einem zweiten Fenster wird \tcpip\bin\slipterm.exe gestartet, ein einfaches Terminal für SLIP. Das Modem wird initialisiert, und dann wird der Provider angerufen durch die Eingabe von ATDT xxxxxxx (bei Tonwahl) oder ATDPxxxxxxx (bei Pulswahl). An die Stelle von x kommt die Telefonnummer des Providers.

Slipterm erlaubt es, sich wie gewohnt per Terminalprogramm einzuloggen. Die gesamte Sequenz sollte man sich notieren, um später das Loginscript oder Response-Dateien erstellen zu können. Kommt vom Server die Meldung, daß die SLIP Session beginnt, und wird die IP-Nummer mitgeteilt, wird slipterm mit F10 verlassen. Auf dem Prompt muß nun erstmal die Konfiguration selbst vorgenommen werden.

---------------------------------------------------------
[C:\]ifconfig sl0 193.174.3.193 193.174.3.1
[C:\]route -fh
[C:\]route add default 193.174.3.1 1
--------------------------------------------------------------
Beispielkonfiguration für eine Verbindung mit dem Provider Toppoint

Die erste IP-Nummer (193.174.3.193) ist die Adresse des eigenen PCs, die der Server zuteilt, die zweite IP-Nummer (193.174.3.1) der Server selbst.

Wer soweit ist, kann mit dem Program \tcpip\bin\ping.exe erst einmal prüfen, ob tatsächlich eine Verbindunmg zustande gekommen ist. PING bekommt als Parameter den Server mitgegeben und schickt dann kleine Pakete an den Server, der sie sofort wieder zurückschickt. Dabei wird dann die Transportdauer mitausgegeben.

-----------------------------------------------------------------
[C:\tcpip\bin]ping 193.174.3.1
PING 193.174.3.1: 56 data bytes
64 bytes from 193.174.3.1: icmp_seq=0. time=312. ms
64 bytes from 193.174.3.1: icmp_seq=1. time=406. ms
64 bytes from 193.174.3.1: icmp_seq=2. time=407. ms
64 bytes from 193.174.3.1: icmp_seq=3. time=406. ms
64 bytes from 193.174.3.1: icmp_seq=4. time=375. ms
64 bytes from 193.174.3.1: icmp_seq=5. time=406. ms
64 bytes from 193.174.3.1: icmp_seq=6. time=406. ms

----193.174.3.1 PING Statistics---- 7 packets transmitted, 7 packets received, 0% packet loss round-trip (ms) min/avg/max = 312/388/407

Der externe Prozeß wurde durch Drücken der Tasten Strg+Untbr oder durch einen anderen Prozeß abgebrochen. ^C ---------------------------------------------------------------------

Die Verbindung steht...

Ping muß mit CRTL-C abgebrochen werden, sonst läuft es für immer. Eine knappe Statistik sagt dann, wie schnell und stabil die Verbindung ist. Das wird einen beim ersten Mal wenig interessieren, zu groß ist die Begeisterung, daß das INTERNET bis auf den eigenen Rechner kommt.

Wer aber ein erfolgreiches PING hinkriegt, kann jetzt auch andere Internetdienste nutzen.


SL/IP und PPP mit OS/2 | Heimatseite | OS/2-Eingang


Copyright 1995

kapeka@toppoint.de