![]() |
co work: batch & delphi?
hi @ delphi-community
schreibe momentan ein kleins programm, das eine verschlüsselte connection zu einem beliebigen service (bsp. netBIOS, pop3, vnc etc.) tunnelt. leider muss ich in der windows-version auf die batch-programmierung zurückgreifen (unix/linux version komplett in perl geschrieben). folgendes problem stellt sich: der kern bildet einen opensrc ssh-client für windows, der shellbasierend ist. a) der endusr muss passwort seperat übermitteln, daher: passwort kann nich zusammen mit loginname im mainprogramm (GUI-basierend) angegeben werden, sondern muss nach aufruf des ssh-clients seperat angegeben werden. das ist unschön. b) batchfile muss sichtbar in der cmd.exe ablaufen, und kann nicht als hintergrundprozess laufen (da passwort abgefragt wird). das ist auch nicht gerade elgant. meine frage nun hat jemand einen guten tip, wie ich über delphi die standarteingabe auf das batchfile umeleiten kann. quasi eine variable (die das pwd enthält) an den ssh-client übergeben? und sollte dies funktionieren... wie kann das batchfile im hintergrund (für den user nicht sichtbar) laufen lasse? besten dank für eure aufgewendete zeit / eure bemühungen merissa / merissa@uncompiled.com |
Hi,
du kannst das ganze per Parameter übergeben
Code:
wird zu
net send localhost nachricht
Code:
jetzt das ganze speichern und ter MyBat.bat und dann aufrufen durch
net send %1 %2
Code:
Ich hoffe das Beispiel ich nicht ganz dumm :) du kannst also jeden Parameter durch ein %nummer ersetzen wobei die Nummern Reihenfolge eingehalten werden muss!
MyBat localhost text
MfG BungeeBug |
hi bungeebug...
ich danke dir für deine bemühung, jedoch glaube ich, das du einen kleinen überlegungsfehler gemacht hast. da 'net (send)' kein interaktives programm ist, ist es möglich, alle benötigten parameter via % aufzulösen (net send %1 %2 > net send 127.0.0.1 message). bei meinem problem handelt es sich jedoch um ein interaktives programm, bei dem ich nicht mehr parameter mitgeben kann als vorbestimmt. dabei erscheint zwangsweise die aufforderung 'users's password:'. an dieser stelle muss der endusr das passwort übergeben und mit enter abschliesen. diesen schritt möchte ich in meinem delphi formular schon bewältigen damit der schritt (das passwort im shellfenster einzutippen) wegfällt und mein delphiprogramm dies für den user übernimmt... nicht ganz trivial, oder? für jeden weiteren vorschlag währe ich dankbar... merissa / merissa@uncomplied.com |
Das sollte mit Pipes gehen, habe ich mal gehört. Mit ihnen sollte es möglich sein, mit einem Konsolenprogramm zu komminizieren.
Frag mich aber bitte nicht, wie das genau geht, habe es selber noch nie gemacht. |
hehe, ja. deine vermutung ist korrekt. jedoch kommt pipen aus der unix welt (mein zuhause *g*) und mir ist nicht bekannt, das die windowsshell pipes (|) unterstütz... lasse mich aber gerne des besseren belehren?!
best regards merissa / merissa@uncompiled.com |
Nein. Nicht diese Pipes. So was meine ich:
![]() Scheint sogar ein kompletter Source zu sein, wie man sowas macht. |
In der Konsole geht das soweit ich weiß auch nicht, aber programmseitig sollte es gehen. Ich habe es noch nie benutzt, aber schau dir im Microsoft SDK die Pipes-Sektion an oder geh auf
![]() |
Moin Zusammen,
wenn man die Ausgabe eines Konsolenprogrammes umleiten will, dann kann man dies auf folgende Arten tun:
Wichtig dabei: Werden diese Ausgaben in eine Datei umgeleitet, so darf man, bei gleichzeitiger Verwendung von 1> und 2> nicht die gleiche Datei angegeben, Ausnahme wäre das NUL Device. Eingaben lassen sich mit Hilfe von < simulieren. Erstellt man sich eine Datei, die ein CR enthält (Notepad öffnen, Enter drücken, Datei speichern, z.B. mit dem Namen CR.DAT), kann man mit < CR.DAT ein ENTER simulieren. Natürlich dürfen die Dateien auch mehr Daten enthalten. Unter DOS kann man mit solchen Dateien z.B. die Einrichtung einer Platte mit FDISK komplett automatisieren. Bei Umlauten muss man aufpassen, die sind bei Konsolenprogrammen anders kodiert als bei GUI Programmen. Auch das | gibt es unter Windows (obwohl ich nicht genau sagen kann, ob es sich so verhält wie unter UNIX). Eines der Standardbeispiele: dir /s | more Jetzt wird die Ausgabe nach jeweils 25 Zeilen angehalten. |
danke @ alle, die mir bisher genatwortet haben.
die lösung von chris sieht sehr interassant aus... kanst du bitte die methodik von STDIN unter windows (< xxx.dat) genauer erläutern oder einen nützlichen link posten? src des tunneling.bat
Code:
nach ausführung & aufbau des tunnels zum sshserver erscheint der dialog: '{usr}'s password:' und genau hier sollte ich die STDIN auf mein GUI (or smothing like that) umleiten, oder via < input.dat lösen.
@echo off
cls echo. echo passwords fuer user '{usr}' auf ssh-server: ssh.exe -S +C -c 3des -L {serv_destPort}:{dest_ip}:{serv_inPort} {usr}@{sshs-ip} @ chris: kannst du mir ein konkretes beispiel posten? währe dir dankbar. gruss, merissa / merissa@uncompiled.com |
Moin Merissa,
falls ich Deinen Beispielaufruf richtig verstanden habe müsste das so gehen:
Code:
Die INPUT.DAT enthält dann sowohl das Passwort, als auch ein ENTER.
@echo off
cls echo. echo passwords fuer user '{usr}' auf ssh-server: ssh.exe -S +C -c 3des -L {serv_destPort}:{dest_ip}:{serv_inPort} {usr}@{sshs-ip} < INPUT.DAT |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz