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”.
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) |