API
Zuletzt geändert: 11.06.2023 10:06

API #

Bei der Beschreibung und den Beispielen der API wird von internen Skripts ausgegangen. Sie eignen sich aber auch ohne Abwandlung in Hybridskripts, wenn der notwendige Block vorangestellt wird.

In den Beispielen werden die wesentliche Zeile fett dargestellt. Der Rest ist jedoch i.d.R. in einer Minimal-Umgebung notwendig.

Alle Beispiele basieren auf VBScript, die Sprache selbst ist nicht Teil dieser Dokumentation.

Property AcceptData: Boolean #

Dieses Property unterbindet dass intern im Objekt Daten vom Telnet-Server empfangen werden können. Es kann nur während einer bestehenden Verbindung gesetzt werden.

Der Standardwert ist True.

Dim Telnet`
`Set Telnet = Client.CreateObject("TELNETLIB")`
`Telnet.Host = "192.168.0.0"`
`Telnet.Connect`
`**Telnet.AcceptData** **= false**`
`...`
`**Telnet.AcceptData** **= true**`
`MsgBox Telnet.Receive`
`Set Telnet = nothing

Im oberen Beispiel wird der Empfang von Daten unterbunden, so dass verschiedene Operationen ausgeführt werden können, bei denen es stören würde, wenn der Empfang von Daten aktiv wäre.

Property BytesSend: Integer #

Dieses Property kann nur gelesen werden. Es gibt an wieviel Bytes vom letzten Send-Befehl schon an den Telnet-Server übertragen wurden. Das Property kann nur während einer Verbindung abgefragt werden.

Der Standardwert ist hier unbedeutend.

Dim Telnet`
`Set Telnet = Client.CreateObject("TELNETLIB")`
`Telnet.Host = "192.168.0.0"`
`Telnet.Connect`
`Telnet.Send "ABCDEFG..."`
`MsgBox **Telnet.BytesSend**`
`Set Telnet = nothing

Nach dem “Send”-Befehl werden die Daten zum Telnet-Server gesendet, wenn es sich um große Mengen handelt, kann mit “BytesSend” geprüft werden, wieviel Bytes bereits gesendet wurden.

Propert Command: Integer #

Dieses Property erlaubt das Native Senden von Telnet-Befehlen. Das Property erlaubt nur das Schreiben, als zuweisen von Integer-Werten. Normalerweise wird diese Routine nicht benötigt, da alle Befehle gekapselt sind und intern die richtigen nativen Befehle abgesetzt werden. Falls man jedoch die absolute Kontrolle bei bestimmten Befehlen benötigt, kann dies mit dem Property “Command” gemacht werden. Diese Befehl-Codes und deren Bedeutung sind im Telnet-Dokument RFC-0854 zu finden. Es kann über “www.rfc-base.org” geladen werden (Jahr 1984). Einige Beispiele hierzu wären:

241 NOP Keine Operation
244 IP Ausführung unterbrechen
246 AYT Ist jemand da?
247 EC Zeichen löschen
248 EL Zeile löschen

Der Standardwert ist hier unbedeutend.

Dim Telnet, i
Set Telnet = Client.CreateObject("TELNETLIB")
Telnet.Host = "192.168.0.0"
Telnet.Connect
For i = 1 to 10000
...
Telnet.command 241
Next
Set Telnet = nothing

In diesem Beispiel wird das Native Kommando NOP (= Nichts ausführen) an den Telnet-Server gesendet. Dies kann sinnvoll eingesetzt werden um kein Timeout zu erhalten, wenn in einer Schleife lokale Wartezeiten entstehen, die ein Timeout des Prozesses bedeuten könnten. In diesem Fall kann man in kurzen Intervallen einen NOP-Befehl senden. Er führt bei der Gegenstelle nichts aus, zeigt aber, dass die eigene Seite noch aktiv ist.

Method Connect #

Mit dieser Methode wird die Verbindung zum Telnet-Server aufgebaut. Zuvor muss mindestens die IP des Host gesetzt worden sein.

Dim Telnet
Set Telnet = Client.CreateObject("TELNETLIB")
Telnet.Host = "192.168.0.0"
Telnet.Connect
...
Set Telnet = nothing

Method Disconnect #

Über die Methode Disconnect wird eine Telnet-Verbindung beendet.

Dim Telnet
Set Telnet = Client.CreateObject("TELNETLIB")
Telnet.Host = "192.168.0.0"
Telnet.Connect
...
Telnet.Disconnect
Set Telnet = nothing

Method DoEvents #

Diese Methode ist speziell für Leerlaufschleifen gedacht, so dass Singletread-Prozesse die Gelegenheit bekommen, die Windows Message-Schleife abzuarbeiten. Wird in einem Skript in einer Schleife auf ein Ereignis gewartet, sollte diese Methode darin aufgerufen werden. Hierdurch wird verhindert, dass Daten bei der Übertragung von und zum Telnet-Server verlorengehen. Ebenso bekommt die Benutzeroberfläche Zeitscheiben, so dass diese sich aktualisieren können.

Dim Telnet, i
Set Telnet = Client.CreateObject("TELNETLIB")
Telnet.Host = "192.168.0.0"
Telnet.Connect
For i = 1 to 10000
...
Telnet.DoEvents
Next
Set Telnet = nothing

Property FirewallAutodetect: Boolean #

Das Property kann gelesen und geschrieben werden. Bei True versucht der Telnet-Client die Firewall zu erkennen und eigenständig anzusteuern. Wird ein nicht existierender DNS-Name verwendet, so wird ein Ausnahmefehler erzeugt, andernfalls wird intern dem Property die IP-Nummer der DNS-Antwort zugewiesen.

Der Standardwert ist True.

Telnet.FirewallAutodetect = True

Property FirewallPassword: Sting #

Für die Authentifizierung an der Firewall werden ein Benutzername und Passwort benötigt. Über dieses Property kann das Passwort gesetzt werden.

Der Standardwert ist ein Leerstring “”.

Telnet.FirewallPassword = "Spectre"

Property FirewallType: Integer #

Der Wert ist “0” bedeutet, dass die Firewall nicht unterstützt wird. Beim Wert von “1” wird das Tunneling-Proxy-Verfahren verwendet und Port 80 erwartet. Beim Wert von “2” eine Socket-4-Proxyverbindung über Port 1080 aufgebaut. Bei einem Wert von “3” wird eine Socket-5-Proxyverbindung über Port 1080 aufgebaut. Sollte ein abweichendes Port notwendig werden, kann dies nach setzen dieses Properties über “FirewallPort” erfolgen.

Der Standardwert ist 0.

Telnet.FirewallType = 2
...
Telnet.FirewallPort = 1081

Property FirewallUser: String #

Werden für die Authentifizierung an der Firewall Benutzer/Passwort benötigt, so kann über dieses Property der Benutzername gesetzt werden.

Der Standardwert ist ein Leerstring “”.

Telnet.FirewallUser = "James"

Property FirwallHost: String #

Über dieses Property kann der Firewall-Host gesetzt werden. Dies kann ein DNS-auflösbarer Name oder eine IP-Nummer sein.

Der Standardwert ist ein Leerstring “”.

Telnet.FirewallHost = "192.168.0.80"

Function GetConfig(Key:String): String #

Der Telnet-Client erlaubt es Konfigurationen, die mit den entsprechenden Properties gesetzt sind über SetConfig zu ändern. Parameter die so geändert wurden können mit GetConfig ausgelesen werden. Das Befehls-Paar “GetConfig” und “SetConfig bietet sich besonders dazu an, einfache Konfigurationsdateien in einem fertig Skript einzulesen und so die Funktionalität des Clients ohne Änderung des Skripts zu verändern.

Dim Telnet, FirewallHost
Set Telnet = Client.CreateObject("TELNETLIB")
FirewallHost = "192.168.0.10"
Telnet.SetConfig "FirewallHost=" & FirewallHost
MsgBox GetConfig("FirewallHost")
...

Method HelloWorld #

Über die Methode “HelloWorld” wird eine einfache Ausgabebox mit der Meldung „Hallo Welt“ ausgegeben. Diese kann beispielsweise als Funktionstest des Objektes verwendet werden.

Dim Telnet
Set Telnet = Client.CreateObject("TELNETLIB")
Telnet.HelloWorld
Set Telnet = nothing

Property Host: String #

Das Property “Host” erlaubt das Angeben des Telnet-Servers über einen DNS-auflösbaren Namen oder über eine IP-Nummer. Das Property kann gesetzt und gelesen werden. Der Standardwert ist ein Leerstring “”.

Dim Telnet
Set Telnet = Client.CreateObject("TELNETLIB")
Telnet.Host = "192.168.0.0"
Telnet.Connect
...
Telnet.Disconnect
Set Telnet = nothing

Property Lastline: String #

Dieses Property gibt die letzte empfangene Zeile zurück. Sie ist speziell für das Abprüfen des Befehls “WaitForStrings” gedacht, wenn mehr als auf einen empfangenen String geprüft werden soll. Der Empfangspuffer “Receive” eignet sich hier nicht, da dieser nur die reinen Nutzdaten ohne Prompt und Befehlsecho ausgibt.

MsgBox Telnet.Lastline

Property Linelen: Integer #

Hierüber kann die aktuelle Zeilenlänge des Terminal-Fensters abgefragt werden. Auch wenn die Terminal-Session ohne Anzeige verarbeitet werden kann, benötigt der Telnet-Server die Fensterhöhe und -breite um ggf. seine Ausgaben anpassen zu können. Nicht jeder Telnet-Server unterstützt flexible Fenstergrößen.

Das Setzen der Zeilenlänge hat nur vor einem “Connect”-Befehl Einfluss. Voraussetzung, dass der Telnet-Server die Fenstergröße auch aktiv vom Client abfragt. Der Standardwert der Zeilenlänge beträgt 80 Zeichen. Wird die Zeilenlänge auf 0 gesetzt, so wird eine eventuelle Serveranfrage als nicht unterstützt beantwortet.

Werden Seitenlänge und die Zeilenlänge auf 0 gesetzt, so wird eine eventuelle Serveranfrage als nicht unterstützt beantwortet.

Der Standardwert ist 80.

Telnet.Linelen = 160

Property Pagelen: Integer #

Hierüber kann die aktuelle Seitenlänge des Terminal-Fensters abgefragt werden. Auch wenn die Terminal-Session ohne Anzeige verarbeitet werden kann, benötigt der Telnet-Server die Fensterhöhe und -breite um ggf. seine Ausgaben anpassen zu können. Nicht jeder Telnet-Server unterstützt flexible Fenstergrößen.

Das Setzen der Seitenlänge hat nur vor einem “Connect”-Befehl Einfluss. Voraussetzung, dass der Telnet-Server die Fenstergröße auch aktiv vom Client abfragt.

Werden Seitenlänge und die Zeilenlänge auf 0 gesetzt, so wird eine eventuelle Serveranfrage als nicht unterstützt beantwortet.

Der Standardwert ist 24.

Telnet.Pagelen = 500

Property Port: Integer #

Das Property “Port” erlaubt das alternative angeben eines Ports, falls der Telnet-Server nicht über das Standard-Port angesprochen werden kann. Wenn es gesetzt wird muss dies vor dem “Connect” geschehen. Auf diese Weise kann zum Beispiel der SMTP-Port 25 angegeben werden, so dass man ein Email über eine Telnet-Verbindung versenden kann.

Der Standardwert ist 23.

Dim Telnet
Set Telnet = Client.CreateObject("TELNETLIB")
Telnet.Host = "192.168.0.0"
Telnet.Port = 25
Telnet.Connect
...
Telnet.Disconnect
Set Telnet = nothing

Funktion Receive: String #

Ruft dem vom Telnet-Server gesendeten Text aus dem Lesepuffer aus. Nach einem Send-Befehl wird normalerweise auf ein eingehendes Ereignis gewartet und danach der Text ausgelesen.

Telnet.Send "LIST"
Telnet.Wait 2000
MsgBox Telnet.Reveive

Method Send (Value:String) #

Mit dem Send-Befehl kann ein Text bzw. Befehl an den Telnet-Server gesendet werden. Carriagereturn und Linefeed (CR+LF) werden automatisch an den Text angefügt.

Die Rückantwort kann mit “Receive” angerufen werden. Je nach Telnet-Server kann es eine Zeitlang dauern bis die Antwort kommt. Aus diesem Grunde gibt es zusätzlich verschiedene “Wait”-Befehle die so lang ein einer Leseschleife warten bis eine bestimmte Zeit verstrichen oder ein bestimmter Prompt empfangen wird.

Telnet.Send "LIST"
Telnet.Wait 2000
MsgBox Telnet.Reveive

Method SendMore #

“SendMore” sendet ein Carriagereturn und Linefeed (CRLF). Hierdurch kann man sehr einfach eine “Weiter”-Schaltung realisieren. Telnet-Server senden in der Regel nach jeweils einer Bildschirmseite ein “Weiter” und warten auf ein CRLF. Über WaitForStrings kann dies automatisiert abgeprüft werden. Danach wird ein “SendMore” gesendet, so dass die komplette Information an den Client übertragen werden kann.

Es ist sicherlich einfacher die “Pagelen” hochzusetzen, aber da nicht jeder Telnet-Server beliebig große Fensterhöhen erlaubt ist der “SendMore”-Befehl ein einfacher Ausweg aus dieser Situation.

Telnet.SendMore

Method SendPassword(Value: String) #

Anstelle von “SendPassword” könnte man natürlich auch den “Send”-Befehl verwenden. Da das Session-Log jedoch alle Empfangs- und Sendedaten speichert, würde das Passwort hier ebenfalls im Klartext gespeichert werden.

Durch “SendPassword” wird verhindert, dass der übergebende Text aufgezeichnet wird. Stattdessen werden in das Session-Log Sternchen übertragen.

Telnet.SendPassword "Spectre"

Property ServerDoesEcho: Boolean #

Während des Verbindungsaufbaus tauschen Telnet-Server und Telnet-Client verschiedene Optionen und Möglichkeiten aus. Unter anderem teilt der Server mit, ob er ein Echo verwendet. Also alle vom Client gesendeten Zeichen direkt als Echo zurück sendet. Ist dies der Fall, so hat das Property “ServerDoesEcho” den Wert “True”. Hierdurch verwendet der Client in der Prozedur “Terminal” kein eigenes Echo. Sieht man also bei der Eingabe seine eigenen Zeichen, so kommen diese vom Server. Umgekehrt kann es sein, dass alle Zeichen doppelt angezeigt werden. In dem Fall sollte nach dem Connect dieses Property auf “True” gesetzt werden. Die Terminal-Prozedur unterbindet dann die Anzeige des eigenen eingetippten Textes. In der Regel geht alles automatisch, so dass der Wert nicht geändert werden muss. Sollte dieser Wert jedoch geändert werden, so muss dies nach dem Connect-Befehl erfolgen, da während der Wert durch das Handshake ggf. erneut gesetzt wird. Ihre Wahl hätte dann keinen Einfluss.

Der Standardwert ist unbedeutend da er beim Verbinden gesetzt wird.

Dim Telnet
Set Telnet = Client.CreateObject("TELNETLIB")
Telnet.Host = "192.168.0.0"
Telnet.Connect
MsgBox Telnet.ServerDoesEcho

Property SessionLog: String #

Über das Property “SessionLog” kann die komplette Telnet-Kommunikation ausgegeben werden, also alle Befehle die über Telnet eingegeben werden und alle Antworten die vom Telnet-Server zurückgegeben werden. Zusätzlich kann man das Session-Log auch durch eine Zuweisung ändern. Der Normalfall wird sein, das Session-Log zurückzusetzen indem ein Leerstring zugewiesen wird.

Der Standardwert ist unbedeutend da er während der Verbindung geändert wird.

Dim Telnet
Set Telnet = Client.CreateObject("TELNETLIB")
Telnet.Host = "192.168.0.0"
Telnet.Port = 25
Telnet.Connect
...
MsgBox Telnet.SessionLog
Telnet.SessionLog = ""
Telnet.Disconnect
Set Telnet = nothing

Method SetConfig(Key: String, Value:String) #

Der Telnet-Client erlaubt es Konfigurationen, die mit den entsprechenden Properties gesetzt sind über SetConfig zu ändern. Parameter die so geändert wurden können mit GetConfig ausgelesen werden. Das Befehls-Paar “GetConfig” und “SetConfig bietet sich besonders dazu an, einfache Konfigurationsdateien in einem fertig Skript einzulesen und so die Funktionalität des Clients ohne Änderung des Skripts zu verändern.

Dim Telnet, FirewallHost
Set Telnet = Client.CreateObject("TELNETLIB")
FirewallHost = "192.168.0.10"
Telnet.SetConfig "FirewallHost=" & FirewallHost
MsgBox GetConfig("FirewallHost")
...

Method ShowStrings (Value:String) #

Über diese Methode lassen sich mehrzeilige Texte in einer Anzeigebox darstellen. Prinzipiell kann man für solche Aufgaben auch “MsgBox” verwenden, jedoch besteht da ein Limit von 1024 Zeichen. “ShowStrings” hat keinerlei solche Limits und erlaubt auch Zusatzfunktionen wie das Suchen in der Ausgabe.

Telnet.showStrings Telnet.SessionLog

Property StatusLog: String #

Dieses Property zeigt alle nativen Ereignisse die während der Kommunikation aufgetreten sind an. Unter anderem das Handshake zu den Options, der Moment der Kommunikations-Verbindung oder der -Trennung. Durch Zuweisen eines Leerstrings kann das Session-Log auch gelöscht werden. Dies kann sinnvoll sein, wenn das Session-Log z.B. zwischenzeitlich in eine Datei fortgeschrieben werden soll.

Der Standardwert ist unbedeutend da er während der Verbindung geändert wird.

Telnet.ShowStrings Telnet.StatusLog

Property TelnetTimeout: Integer #

Der wert ist in Millisekunden angegeben und gibt an wieviel Zeit ohne ankommende bzw. zu sendende Daten gewartet werden darf bis ein Ausnahmefehler ausgelöst wird. Bei einem Wert von “0” wird kein Timeout verwendet.

Der Standardwert ist 0.

Telnet.TelnetTimeout = 2000

Method Terminal #

Ruft ein einfaches interaktives Terminal zur bestehenden Telnet-Session auf. Auf diese Weise kann man ganz klassisch mit Tastatureingaben und dem Telnet-Server kommunizieren. Das Session-log wird hierbei transparent mitgenutzt. Es werden keine Emulationen wie VT100, ANSI usw. unterstützt. Ebenso keine Editionsbefehle. Alles Getippte wird sofort zeichenweise gesendet.

Das Terminal-Fenster kann jederzeit geschlossen werden.

Dim Telnet
Set Telnet = Client.CreateObject("TELNETLIB")
Telnet.Host = "192.168.0.0"
Telnet.Connect
Telnet.Terminal
Telnet.Disconnect
Set Telnet = nothing

Property Timeout: Integer #

Mit der Eigenschaft Timeout kann ein Wert in msec. Gelesen oder geschrieben werden. Der Wert 1000 steht dann also für eine Sekunde. Über den Timeout wird geregelt wie lange z.B. auf die Antwort eines Verbindungsaufbaus gewartet werden soll. Ebenso wird hierüber gesteuert wie lange bei dem Befehl “WaitForStrings” auf die zu prüfenden Texte gewartet werden soll.

Der Standardwert ist 1000.

Telnet.Timeout = 2000

Property Transparent: Boolean #

Hierüber kann angebenden werden ob EULANDA eingehende Daten ungefiltert weitergibt. Normalerweise werden Statusinformationen und Präfixe etc. aus der eigentlichen Antwort entfernt, so dass die typischen Nutzdaten mit “Reveive” ausgelesen werden können. Wir das Property jedoch auf “True” gesetzt so werden alle Empfangsdaten 1:1 weitergereicht.

Der Standardwert ist False

Telnet.Transparten = True

Method Wait(Value: Integer) #

Diese Methode wird nach dem Send-Befehl aufgerufen und wartet eine angegebene Zeit in msec. Auf ankommenden Text. Anschließend kann der Empfangstext mit der Funktion “Receive” abgerufen werden.

Telnet.Send "LIST"
Telnet.Wait 2000
MsgBox Telnet.Receive

Method WaitForStrings(Value: String) #

Telnet.Send "LIST"
Telnet.WaitForStrings "> " & vbCrLf & "More [Q(uit)]>"
If Telnet.Lastline = "> " then
 MsgBox Telnet.Receive
Else
 Telbox.SendMore
End if

In diesem Beispiel wird auf zwei Strings gewartet. Sobald einer der beiden kann wird gibt der Befehl “WaitForStrings” die Kontrolle an das Skript zurück. Mit dem Property “Lastline” lässt sich die letzte empfangene Zeile getrennt auswerten.