Telnet verbindung mit AutoIt herstellen

  • Hallo,

    ich hab einen telnet server auf meinem laptop (win7ulti x64) laufen, auf den ich von meinem PC aus zugreifen kann.
    Auf dem Laptop läuft ein kleines programm (autoit natürlich) welches 10 sekunden nach dem anmelden automatisch gestartet wird.
    Zuerst stellt es eine verbindung mit dem heimnetzwerk her, sodass ich Zugriff auf meinen PC hab.
    Danach liest es die IP aus und schreibt sie in eine INI-Datei auf meinem PC. (also übers Heimnetzwerk)
    Dies geschieht alle 5 Minuten, da sich die IP ja ändert wenn ich zb in ein anderes wlan netz wechsel mit dem laptop.
    Desweiteren befinden sich 20 leere Dateien auf dem laufwerk C: meines laptops. file_01, file_02, file_03,usw...
    Das Programm überprüft jetzt dauerhaft ob diese Dateien vorhanden sind.
    Wenn eine Datei fehlt wird eine Aktion ausgeführt. z.B file_01 fehlt? dann wird eine msgbox angezeigt.
    Dies mach ich deswegen so, weil ich über eine telnet verbindung ja keine programme starten bzw. meldungen anzeigen kann.
    Also lösch ich einfach über telnet z.b. die datei file_01, das Programm am Laptop erkennt dass diese datei fehlt, erstelle sie anschließend neu, und führt dann die entsprechende Aktion aus.
    funktioniert auch alles super.
    Hab sogar ne funktion die den laptop sperrt. also ne vollbild gui anzeigt mit text.
    Und selbst wenn man einfach so den akku raus macht oder ausschaltet. Auch nach dem neustart wird nach anmelden sofort wieder das gui angezeigt. mit BlockInput natürlich ;)
    Erst wenn ich die bestimmte datei lösch wird wieder entsperrt.

    Naja aber ich mach das jetz momentan alles über cmd.
    per Batchscript hab ich echt nichts gefunden bei google.
    Deswegen wollt ich mal fragen ob es eventuell ne UDF gibt oder irgend eine möglichkeit das doch über batchscript zu realisieren? bzw. _RunDOS?
    Hab echt überall gesucht aber nix brauchbares gefunden.
    Will halt gern alles in 1 Programm einschließen. So mit schönem GUI und nich tausend einzelnen programmen und scripts.
    Wär toll wenn mir jemand helfen könnte :)

    mfg, Julian

  • Was war jetzt genau die Frage? Du kannst doch deine exe auf den entfernten Rechner legen und remote ausführen.

    wie bereits erwähnt.
    Ich suche nach einem Weg eine telnet verbindung über AutoIt herzustellen.


    So wie ich das verstanden habe, willst du Telnet nicht über CMD ausführen, sondern direkt aus AutoIt heraus?
    Ich kenne mich nicht ganz mit Telnet aus, aber soweit ich das richtig verstehe ist das eine TCP-Verbindung mit bestimmten Commands.

    Vielleicht hilft dir TCPSend weiter:
    https://www.autoitscript.com/autoit3/docs/functions/TCPSend.htm

    hm telnet ist eine TCP verbindung. ja. aber wie ich das jetz mach weiß ich nich wirklich.

  • Ich weiß zwar nicht, warum du gerade mir eine Privatnachricht geschickt hast, aber ich kann dir tatsächlich helfen.

    Telnet ist im Normalfall weitestgehend regellos, d.h. der Text wird in der Regel 1:1 übertragen. Ob dies im Standard so vorgeschrieben ist oder ob das nur in manchen Implementierungen der Fall ist, das kann ich dir nicht sagen. Unter Windows und Linux verhält es sich jedenfalls so. Daher kann man durch eine einfache TCP-Verbindung auf Port 23 ohne weitere Regeln ohne Schwierigkeiten per Telnet kommunizieren. Ich empfehle für TCP-Verbindungen unter AutoIt die TCP-UDF von Kip aus dem EN-Forum. Damit lassen sich die Verbindungen wesentlich leichter verwalten.

    Im Folgenden habe ich noch kurz ein kleines Beispiel für einen simplen Telnet-Server mit Hilfe der genannten TCP-UDF geschrieben. Wenn du unter Windows dieses Skript startest und dann in der CMD per telnet 127.0.0.1 den Server ansprichst, solltest du ganz normal kommunizieren kennen.

    Spoiler anzeigen
    [autoit]


    #include "TCP.au3"

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("Simple Telnet Server", 300, 200)
    $cLog = GUICtrlCreateEdit("", 0, 0, 300, 175)
    $cToSend = GUICtrlCreateInput("", 0, 175, 250, 25)
    $cSend = GUICtrlCreateButton("Senden", 250, 175, 50, 25)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    $hServer = _TCP_Server_Create(23) ;Port 23: Telnet

    [/autoit] [autoit][/autoit] [autoit]

    _TCP_RegisterEvent($hServer, $TCP_NEWCLIENT, "TCP_NewClient")
    _TCP_RegisterEvent($hServer, $TCP_DISCONNECT, "TCP_Disconnect")
    _TCP_RegisterEvent($hServer, $TCP_RECEIVE, "TCP_Receive")

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $cSend
    $sToSend = GUICtrlRead($cToSend)
    _TCP_Server_Broadcast($sToSend)
    LogWrite("'" & $sToSend & "' gesendet")
    GUICtrlSetData($cToSend, "")
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func TCP_NewClient($hSocket, $iError)
    _TCP_Send($hSocket, "Willkommen!")
    LogWrite("Neuer Client verbunden")
    EndFunc ;==>NewClient

    [/autoit] [autoit][/autoit] [autoit]

    Func TCP_Receive($hSocket, $sReceived, $iError)
    LogWrite("'" & $sReceived & "' empfangen")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func TCP_Disconnect($hSocket, $iError)
    LogWrite("Client hat die Verbindung beendet")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func LogWrite($sText)
    GUICtrlSetData($cLog, StringFormat("%s[%.2d:%.2d] %s", GUICtrlRead($cLog) & @CRLF, @HOUR, @MIN, $sText))
    EndFunc

    [/autoit]
  • hm also der script funktioniert bei mir nich. aber den hab ich vorhin schon gefunden.
    diese UDF ist ja ok aber ich will ja nicht kommunizieren sondern nur eine bestimmte datei löschen.
    Wie mach ich das?

  • Das funktioniert schon, macht allerdings etwas anderes, als du wolltest.
    Ich habe die Fragestellung wohl ein wenig missverstanden; Das, was ich geschrieben habe, "missbraucht" Telnet zur Kommunikation, ist also nicht des Rätsels Lösung.

    Allerdings willst du sehr wohl kommunizieren, denn nur dadurch kannst du das Löschen einer Datei anstoßen. Das Telnet-Protokoll scheint doch ein wenig komplexer zu sein, als ich zunächst dachte. Das hier ist alleine die Authentifizierung... Es ist zwar möglich, allerdings mit relativ hohem Aufwand verbunden. Was spricht dagegen, eben einen eigenen Server zu schreiben, der genau diese Datei löscht? Dann kann man das Protokoll selber gestalten, dann allerdings wesentlich einfacher. Dann würde im Hintergrund auf deinem Server-Rechner ein Skript laufen, das auf Port XYZ lauscht. Wenn da eine Anfrage vom Client-Rechner reinkommt, wird eben die Datei gelöscht. Fertig.

  • hm das klingt schon eher interessant.
    Und ja ich denk mit TCP komm ich da nich weiter auch wenns vielleicht möglich wäre das ist mir zu hoch.
    Aber gut eigener Server wär gut.. also einfach auf einem bestimmten Port "lauschen".
    Zunächst müsste ich ja sicherstellen dass dieser Port frei ist oder?
    Das heißt im WLAN Router der zwischen den PC's hängt? muss ich den durchschleifen iwie...gut das krieg ich schon hin.
    Aber wie bewerkstellige ich das mit dem abfragen des ports?

  • @Lottich
    Exakt das meine ich.

    @jbc
    Ein Beispiel für einen ganz simplen Server-Client-Aufbau kannst du meinem obigen Link zur TCP-UDF von Kip entnehmen. Beide zusammen benötigen glaub ich keine 50 Zeilen. Normalerweise musst du da auch im Router/Modem nichts mehr freigeben, sofern die Kommunikation nur im Intranet erfolgt. Den Port fragst du dann eben über TCP ab, wenn man das so nennen will (nicht über Telnet!).

    Grüßle

  • Hallo,
    erstmal danke für die Antworten :)

    Und danke für den Tipp mit TCP.
    die UDF hab ich zwar nich kapiert, hab mir stattdessen aber mal das ganze angeschaut mit TCP und so.
    Hab jetz hinbekommen ne TCP Verbindung herzustellen und Daten zu senden funktioniert 1A :)

    Mein einziges bestehendes Problem ist jetzt nur die IP Addresse.
    Denn die ändert sich irgendwie ständig auf meinem Laptop auch wenn ich gar nich das WLAN Netz wechsel.
    Hab sie jetzt bisher beim Systemstart ausgelesen und über "@IPAddress1" ausgelesen und in ne INI Datei auf meinem PC geschrieben.
    Allerdings funktioniert das mit dem Heimnetzwerk nich so gut immer.

    Passt vielleicht nich ganz dazu zum Thema aber weiß jemand vielleicht wie ich das so einstell dass die IP sich entweder nicht mehr ändert,
    oder irgendeine andere Möglichkeit?

  • Passt vielleicht nich ganz dazu zum Thema aber weiß jemand vielleicht wie ich das so einstell dass die IP sich entweder nicht mehr ändert,

    Lies die Anleitung deines Routers und richte den DHCP Server des Routers so ein, dass er anhand der MAC Adresse der jeweiligen Netwerkkarte immer die gleiche IP vergibt. (Stichwort: "static DHCP")
    Alternativ konfiguriere die IP am jeweiligen Gerät statisch. Da du aber davon sprachst, dass der Laptop teilweise in fremden WLANS aktiv ist, also vermutlich nicht immer bei dir zuhause steht könnte eine statische IP Konfiguration am Gerät problematisch sein, da jedes Netzwerk andere IP settings haben kann. Die beste Lösung ist also der weg über deinen Router und statischer DHCP IP Vergabe.

    Einmal editiert, zuletzt von misterspeed (9. Januar 2015 um 21:03)