Anwendungsbeispiele
Zuletzt geändert: 11.06.2023 10:06

Anwendungsbeispiele #

Beispiel einer LANCOM-Session #

Dieses Telnet-Modul wurde ursprünglich für einen Anwendungsfall zur Kontrolle eines LANCOM-Routers erstellt, es gibt natürlich jede Menge anderer Einsatzzwecke.

In diesem Beispiel zeigen wir, wie eine bestimmte Firewall-Regel aus- bzw. eingeschaltet wird. Im selben Skript könnte dann eine AS2-Verbindung aufgebaut werden um eine EDI-Nachricht zu versenden. Unser Beispiel ist ohne Fehlerbehandlung sehr rudimentär. Es kann aber durchaus die Basis für Ihre erste Telnet-Anbindung werden.

Für diejenigen die die LANCOM-Router nicht kennen, ein kurzer Abriss. Der Router lässt sich zum einen mit einem grafischen Tool konfigurieren, aber parallel dazu auch über das Telnet-Protokoll. In diesem Beispiel wurde zuvor eine Firewall-Regel definiert, die ausgehend das AS2-Port 8080 sperrt. Bei einer anstehenden Übertragung, soll EULANDA jedoch das Port für diesen Zeitraum öffnen. Die Regel hat den Namen “REJECT_AS2”.

img

Firewall Regel zur Blockung von AS2-Datenpaketen

Über eine Telnet-Session kann man nun diese Regel ein- bzw. ausschalten. Das Skript für eine interne Ausführung hierzu würde wie folgt aussehen:

Dim Telnet`
`Const Prompt = "> "`
`Const Password = "Password: "`
`Const More = "MORE [Q(uit)]>"`
`Set Telnet = Client.CreateObject("TELNETLIB")`
`Telnet.Host = "192.168.0.1"`
`Telnet.Connected = true`
`Telnet.WaitForStrings Prompt & vbCRLF & Password`
`if Telnet.LastLine = Password then`
` Telnet.SendPassword "SPECTRE"`
` Telnet.WaitForStrings Prompt`
`end If`
`Telnet.Send "cd setup/IP-Router/Firewall/Rules/REJECT_AS2"`
`Telnet.WaitForStrings Prompt`
`Telnet.Send "set firewall_rule no"`
`Telnet.WaitForStrings Prompt`
`Telnet.Send "exit"`
`Telnet.Disconnect`
`Set Telnet = nothing

Nach dem Connect wird ggf. auf ein Passwort bzw. das Prompt gewartet. Wird vom Telnet-Server eine Passwort Anfrage gesendet, so wird dieses gesendet. Danach wird in das Konfigurations-Verzeichnis der Firewall bzw. direkt in die Regel mit dem LCOS “cd”-Befehl gewechselt. Der Spaltenname “firewall_rule” der Regetabelle zu der angewählten Regel “REJECT_AS2” wird auf “no” gesetzt und die Verbindung wird getrennt.

Auf die gleiche Weise kann die Firewall-Regel wieder eingeschaltet werden, nur dass hier der Spaltenwert auf “yes” gesetzt wird.

Dieses einfache Beispiel zeigt, welche neuen Möglichkeiten sich mit EULANDA 6 zur automatischen Übertragung von Daten oder dem Konfigurieren von abgesetzten Einheiten ergeben.

Das gleiche Skript kann durch voranstellen des Blocks, wie im Kapitel Hybrid-Skript beschrieben, auch direkt als Vbs-Datei vom Betriebssystem gestartet werden.

Beispiel SMTP über Telnet #

Dieses Beispiel zeigt den Einsatz eines Telnet-Clients zu Versand eines Emails. Das Beispiel wird nur mit internen Mailservern funktionieren, da die externen heute alle eine Authentifizierung erwarten.

Das folgende Beispiel ist sehr einfach gehalten, und mit einem lokalen Exchange-Server getestet.

Dim Telnet`
`Set Telnet = Client.CreateObject("TELNETLIB")`
`Telnet.Host = "192.168.0.10"`
`Telnet.Port = 25`
`Telnet.Connect`
`Telnet.WaitForStrings "+0100"`
`Telnet.Send "hello"`
`Telnet.WaitForStrings "]"`
`Telnet.Send "mail from:<cn@eulanda.de>"`
`Telnet.WaitForStrings "OK"`
`Telnet.Send "rcpt to:<info@eulanda.de>"`
`Telnet.WaitForStrings "OK"`
`Telnet.Send "data"`
`Telnet.WaitForStrings "<CRLF>.<CRLF>"`
`Telnet.Send "Subject: Eulanda Telnet-Test" &_`
`         vbCrLf & vbCrLf &_`
`         "Dies ist der Mailbody" &_`
`         vbCrLf & "."`
`Telnet.WaitForStrings "Queued mail for delivery"`
`Telnet.Send "quit"`
`Telnet.Wait 2000`
`Telnet.ShowStrings Telnet.SessionLog`
`Telnet.Disconnect`
`Set Telnet = nothing

Am Ende der Kommunikation wird die komplette Session zur Kontrolle in einem Textfenster angezeigt. Hier kann man auch kontrollieren, ob die “WaitForStrings” richtig greifen.

Zusammenfassung #

Vorbereitung #

EULANDA.exe einmalig mit “eulanda.exe /Regserver” im Administrator-Moudus starten.

Hybrid-Vorschaltblock #

Dim EulandaObjStr : EulandaObjStr = _`
` "Dim app, client, ellib, consts, dataset" & vbCrLf &_`
` "Set app = CreateObject(""Eulanda.Application"")" & vbCrLf &_`
` "Set client = App.Clients(""Eulanda GmbH"")" & vbCrLf &_`
` "client.active = True" & vbCrLf &_`
` "Set ellib = Client.createobject(""Context"").ellib" & vbCrLf &_`
` "Set consts = Client.createobject(""Context"").consts" & vbCrLf &_`
` "Set dataset = Client.createobject(""CurrentDataset"", ""Eulanda.Adresse"")"`
`Sub EulandaObj`
` Dim dummy`
` dummy = False`
` on error resume next`
` if Wscript.ScriptFullName <> "" Then dummy = True`
` if err.number = 0 Then ExecuteGlobal EulandaObjStr`
` on error goto 0`
`end Sub`
`EulandaObj

Befehle #

Befehl Attribut Beschreibung
Property AcceptData: Boolean RW Empfangspuffer wird gefüllt
Property BytesSend: Integer R Bytes gesendet nach SEND-Befehl
Property Command: Integer W Natives Kommando lauf RFC
Method Connect Verbindet mit Host
Method Disconnect Trennt vom Host
Method DoEvents Ermöglicht Message-Abarbeitung
Property FirewallAutotetect: Boolean RW Firewall benutzen, falls erkannt
Property FirewallPassword: String RW Firewall-Passwort
Property FirewallPort: Integer RW Port zur Firewall
Property FirewallType: Integer RW 0=Nicht verwenden
Property FirewallUser: String RW Benutzer an Firewall
Property FirewallHost: String RW Host-Name der Firewall
Function GetConfig(Key: String): String Textbasierte Konfiguration abrufen
Method HelloWorld Testet mit Popup auf Telnet-Bibliothek
Property Host: String RW Host-Name des Telnet-Server
Property Lastline: String R Letzte Empfangszeile
Property Linelen: Integer RW Virtuelle Bildschirmbreite
Property Pagelen: Integer RW Virtuelle Bildschirmhöhe
Property Port: Integer RW Port des Telnet-Server
Function Receive: String Empfangsdaten seit letztem Send-Befehl
Method Send(Value: String) Senden einen Text zzgl. CRLF
Method SendMore Sendet nur CRLF
Method SendPassword(Value: String) Sendet Passwort ohne Logging
Property ServerDoesEcho: Boolean RW Server sendet Zeichen-Echo
Property SessionLog: String RW Alle übertragenen Nutzdaten
Method SetConfig(Key: String; Value: String) Setzt textbasierte Konfiguration
Method ShowStrings(Value : String) Text-Ausgabefenster
Property StatusLog: String RW Statuslog der Session
Property TelnetTimeout: Integer RW Timeout auf Telnetebene
Method Terminal Interaktives Terminalfenster nach Connect
Property Timeout: Integer RW Timeout für Wait-Befehle
Property Transparent: Booelan RW Receive zeigt auch native Daten
Method Wait(Value: Integer) Wartet x mSec.
Method WaitForStrings(Value: String) Wartet auf empf. Strings (CRLF getrennt)