PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → [WD17] Connexion SSH (linux)
[WD17] Connexion SSH (linux)
Débuté par technique, 08 fév. 2012 17:47 - 15 réponses
Posté le 08 février 2012 - 17:47
Bonjour,
Je désirerai établir une communication sécurisé SSH avec un Linux à partir de Windev 17.
J'ai vu sur le forum un composant CSSH4WD de la société Librasoft, quelqu'un connait ce composant ? fonctionne t-il bien ?
Existe t'il un classe ou autres... (libre de droit) pour communiquer en SSH avec un Linux ???
Merci
Olivier
Posté le 10 février 2012 - 08:10
A priori, je n'inspire personne avec ma question sur la connexion SSH vers un linux !
Posté le 10 février 2012 - 12:40
Bonjour,

Le 10/02/2012 07:10, Olivier a écrit :
A priori, je n'inspire personne avec ma question sur la connexion SSH vers un linux !



La première est d'utiliser putty,
http://www.chiark.greenend.org.uk/~sgtatham/putty/.
Il suffit d'appeler l'outil en ligne de commande.

Il existe un fork de putty qui est extraputty, qui fournit en plus une
API donc plus adapter pour un appel direct de Windev.

http://www.extraputty.com/

Je pense que l'outil que vous citez est simplement une classe d'accès à
ces programmes.

--
suivre ce lien pour répondre:
http://cerbermail.com/…
Daniel
;-)
Posté le 22 février 2012 - 11:06
Bonjour,
Je suis également intéressé par ce sujet...
et je recherche toutes informations ou des bouts de code qui fasse avancer le sujet !
Merci
Membre enregistré
4 messages
Posté le 22 février 2012 - 11:10
Bonjour,

Je teste actuellement la dll extraputty dans le but de communiquer en SSH avec un switch.

La connexion se passe bien par contre je n'arrive pas à lire le résultat lors de l'envoi d'une commande au switch.

Je n'arrive à trouver comment utiliser la procédure callback.

Voici les gabarits des deux fonctions de l'API extraputty:

int Connexion(char *TargetName, unsigned long *ConnectionId,char *Login,char *Password,bool ShowPuTTY,long Protocol, unsigned long PortNumber,long GenerateReport,int *CallBackRcvData,unsigned long SpecSettings);

int SendRcvData(unsigned long ConnectionId,char *Command,char *Title,char *Comments,long TimeCapture,char **DataRcv,long MaxSizeofData,unsigned long settings);

et la description du paramètre CallBackRcvData de la fonction Connexion :

CallBackRcvData Optional parameter,callback used to receive data from putty terminal, Syntax :
int CallBackRcvData(unsigned long ConnectionId,char *buf, DWORD size,DWORD ConnectionStatus)
ConnectionStatus :
· 0 : Connection open
· 1 : Connection close by host

Voici mon code :

// var globale :
Datarcv est une chaîne sur 10000

// fonction callback :
PROCEDURE CallBackRcvData(ConnectionID est un entier, Buf est une chaîne, Size est un entier, ConnectionStatus est un entier)
Datarcv = Buf
RENVOYER 0

// code principal
nIdDLL est un entier
nResultat est un entier
nConnection est un entier sur 8 octets

nIdDLL = ChargeDLL("ExtraPuTTY.dll")

SI nIdDLL = 0 ALORS

Erreur("Erreur lors du chargement de la DLL")

SINON

nResultat = AppelDLL32("ExtraPuTTY.dll", "Connexion", "192.168.175.19", &nConnection, "user", "pwd", False, 1, 22, 0, &CallBackRcvData, 0)

nResultat = AppelDLL32("ExtraPuTTY.dll", "SendRcvData", nConnection, "show vlan", "", "", 1000, &Datarcv, 10000, 0)

Trace(nResultat + RC + Datarcv)

AppelDLL32("ExtraPuTTY.dll", "CloseConnexion", nConnection)

DéchargeDLL(nIdDLL)

FIN


Actuellement le programme plante sur l'appel à la fonction SendRcvData...

Merci d'avance pour vos conseils.
Posté le 06 mars 2012 - 10:09
Bonjour,
As-tu avancé sur l'utilisation de la DLL pour SSH, car j'ai le même problème que toi, et je dois avouer que je suis complètement bloqué depuis pas mal de temps.
Merci !!!
Marc
Posté le 06 mars 2012 - 16:53
Bonjour,
Avec la DLL ExtraPutty, je n'arrive pas à me connecter... j'ai irrémédiablement une erreur 1 ! alors que le port 22 est accessible (j'arrive à me connecter avec un autre programme).
Quelqu'un à le même soucis ?
Merciiiii
Olivier


nIdDLL = ChargeDLL("ExtraPuTTY.dll")
SI nIdDLL = 0 ALORS
Erreur("Erreur DLL")
SINON
nResultat = AppelDLL32("ExtraPuTTY", "Connexion", "192.168.1.88", &nConnection, "root", "root", False, 1, 22, 0, &CallBackRcvData, 0)
FIN
Posté le 06 mars 2012 - 18:13
Bonjour Julien...
Si j'arrive à me connecter... et si je trouve une solution pour l'envoie de commande, je te donnerai un bout de programme. Mais pour l'instant, j'ai toujours le retour 1 à la commande "Connexion" alors qu'avec Putty j'arrive à me connecter. Bizarre...
A+
Membre enregistré
4 messages
Posté le 06 mars 2012 - 18:47
Bonjour,

De mon côté j'en suis toujours au même point.
L'appel de la fonction "Connexion" semble bien se passer (la fonction retourne 0, ce qui indique que la connexion est établie).
Par contre, je n'arrive pas à utiliser la fonction suivante "SendRcvData", j'ai une erreur Windev...
Posté le 07 mars 2012 - 17:24
Bonjour Julien...
Ci-joint la fonction d'envoie de commande qui fonctionne parfaitement... le retour de la commande se trouve dans la fonction 'callback" que tu as définit dans la connexion SSH.



Bon développement...
Olivier BOHER
www.xenon33.fr
Posté le 07 mars 2012 - 18:07
Bonjour,

La connexion (où tu définis la fonction callback) :

nResultat est un entier

nResultat = AppelDLL32("ExtraPuTTY", "Connexion", "192.168.1.88", &gnIDConnexion, "root", "root", False, 1, 22, 0, &CallBackRcvData, 0)
SI nResultat <> 0 ALORS
// Erreur
RETOUR
FIN


L'envoie de la commande :

sTamponReception est une chaîne sur 10000
nResultat est un entier

sTamponReception = Répète(Null, 10000)

nResultat = AppelDLL32("ExtraPuTTY", "SendRcvData_O", nIDConnexion, &sCommande, "", "", 5000, &sTamponReception, 10000, 0)
SI nResultat <> 0 ALORS
// erreur
FIN


La fonction callback (que tu as définit lors de la connexion) :

Procedure CallBackRcvData(ConnectionID est un entier, Buff est un chaîne, Size est un entier, ConnectionStatus est un entier)

VbBuf est une chaîne ASCIIZ sur 10000

SI (Size > 0) ET (ConnectionStatus = 0) ALORS
VbBuf = Complete(Size + 5, Null)
API("kernel32", "RtlMoveMemory", &VbBuf, Buff, Size)
Trace(VbBuf)
SINON SI (ConnectionStatus <> 0) ALORS
Erreur("Connection closed by remote host")
FIN

RENVOYER 0



Voilà tu as toutes les pièces du puzzle !!! çà marche impec !

Bon développement...
Olivier BOHER
http://www.xenon33.fr/
Posté le 07 mars 2012 - 18:48
Bonjour Julien,
Tu as la réponse à ta question au dessus !!! j'ai fait un copier/coller du code.
Bon développement...
Olivier BOHER
http://www.xenon33.fr/
Membre enregistré
4 messages
Posté le 07 mars 2012 - 18:49
Bonjour Olivier,

Merci beaucoup de ton retour, je pense que cela va bien m'aider :)

Juste une petite précision, faut-il définir la fonction 'callback' nommée CallBackRcvData et si oui comment ?

J'avoue que je ne maitrise pas trop ce concept de fonction callback...

Merci.
Membre enregistré
4 messages
Posté le 08 mars 2012 - 10:12
Merci beaucoup Olivier, avec ton exemple cela devrait rouler :)

C'est bizarre, mes messages arrivent sur le forum 1h après que je les poste...

Bonne journée.
Posté le 23 mars 2012 - 20:40
Sinon le plus simple c'est de regarder les examples, dispo sur le site.
Il y a des examples n VB,VB.net,C# et MFc.

@+
Membre enregistré
2 messages
Posté le 20 juin 2012 - 13:06
bonjour, SVP comment utiliser SSH avec windev15 (j ai aucun idée sur SSH)?