Integrer une console dans une interface coder en C

Fermé
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 - Modifié le 29 avril 2017 à 22:43
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 23 mai 2017 à 14:27
Salut à tous,

Je developpe en C sous codeblock avec la librairie SDL2.0 une interface de pilotage pour vehicule Radio Commander, seulement, j'ai besoin d'integrer l'application " putty" à mon interface, ou developper une fonction qui ferai la meme chose.

Comment puis je faire ceci ? Est ce que c'est réalisable ??? Quelqun a une idee ?

Merci

3 réponses

Photoshoper Messages postés 90 Date d'inscription jeudi 11 décembre 2014 Statut Membre Dernière intervention 2 mai 2019 6
30 avril 2017 à 01:15
Bonsoir poparnassus j’espère que vous allez bien?...

Pour répondre à votre question...oui! cela est possible.
Il est possible de mettre en place un client ssh en langage C, comment?
ça, j'ignore.
Mais je peux vous donner quelques références
y a un code source pas mal sur putty que vous pouvez consulter sur https://github.com/KasperDeng/putty

ou encore consulter la librari ssh en C sur https://www.libssh.org/

J’espère que cela vous aidera
0
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30
30 avril 2017 à 01:34
ok merci je vais regarder !
0
YCN- Messages postés 116 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 juillet 2017 12
Modifié le 12 mai 2017 à 15:13
Je crois que tu n'as pas forcément très bien définit ton besoin.
Puisque tu peut/veut faire du ssh c'est que tu as un réseau. Lorsque l'on souhaite faire de l'envoie réception de messages sur un réseau, on ne fait pas du ssh, on va plutôt faire un petit serveur http. Qui est beaucoup plus approprié à ton besoin (je crois).
Tu vas pouvoir envoyer des requêtes à ton serveur de manière simple et recevoir des requêtes de manières simple. Tu vas trouver pas mal d'exemples sur internet sur comment faire un petit serveur http en C qui reçoit des message.
C'est de cette manière que l'on fait habituellement, si tu veux de plus amples informations je pourrais t'en donner :).
Cette manière est simple, efficace et ne prend pas plus que 30-40 lignes de C.
0
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30
Modifié le 13 mai 2017 à 12:00
Je m'explique, j'ai besoin d'utiliser le ssh pour pouvoir administrer le systeme mini-pc (Raspberry en faite) embarqué sur le vehicule, mais qui sert aussi de "relai", c-a-d que le Raspberry communique avec une carte arduino. Si par exemple j'ai besoin de modifier le code source de la carte arduino, je l'up dans le raspberry et je le transmet dans l'arduino.
Cest tres important pour moi d'avoir une console SSH dans mon interface

aPres pour la communication "Commande" j'utilise les sockets.

En faite se qui faut comprendre, cest que ce projet est un prototype, une fois qui sera plus ou moins fonctionnel il sera adapter sur un drone.
Un drone qui sera dans un lieu inaccessible pour moi,de ce fait je dois prévoir tout les cas de figure.
Par exemple je dois construire une sorte de "station d'amarrage" pour que le drone se pose et se recharge seul, ou reste en attente de maintenance.

Entre nous j'ai tout mon temps, je travaille pour une boite d'ingenieurie,et ils ont accepter de me prendre en bts informatique l'année prochaine, du coup j'en ferai un projet pour le diplome et un nouveau produit a vendre ^^.
0
YCN- Messages postés 116 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 juillet 2017 12
16 mai 2017 à 16:26
Mais même pour des commandes en fait tu peux utiliser des sockets http, tu peux utiliser le syscall system(""); qui te permet d'éxécuter une commande UNIX directement. C'est exactement comme si tu le faisais dans un terminal !

YCN-
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
17 mai 2017 à 09:20
Salut YCN-,

Selon ma compréhension, poparnassus réalise un programme utilisant notamment la SDL, les sockets, etc., sous Windows, pour communiquer avec un Rapsberry, qui devrait fonctionner sur un système basé sur une Linux Debian, sur lequel il veut se connecter en ssh à partir de son application C.

A ma connaissance, Windows ne comporte pas de commande système pour se connecter à un serveur ssh, donc j'ai un peu du mal à comprendre ce que tu veux dire par "tu peux utiliser le syscall system(""); qui te permet d'éxécuter une commande UNIX directement". Peux-tu m'éclairer ?


Dal
0
YCN- Messages postés 116 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 juillet 2017 12
17 mai 2017 à 15:04
Oui, bah sur le serveur qu'il a sur la raspberry pi il peut directement piper les requêtes qu'il reçoit vers une commande.
Par exemple sur la raspberry pi si je veux éxécuter le pgm /home/pi/mon_pgm
Il pourrait tout simplement envoyer une requête à la raspberry pi contenant par exemple :
"system /home/pi/mon_pgm" qui une fois reçu permettra de faire directement (après traitement des requêtes : system("./home/pi/mon_pgm")
Ce qui me semble beaucoup plus simple et plus direct. Il suffit de faire un switch sur les requêtes reçu et puis voilà dès que le mot clef "system" (ou celui qu'il voudra d'ailleurs) arrive on sait que cette requête doit être exécuter avec un appel system.

YCN-
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 17 mai 2017 à 15:54
OK.

Il faut bien sûr un peu sécuriser ce que tu proposes, avec une authentification, et en filtrant ce qui serait traité, car un "system cp /etc/passwd $(pwd)/index.html" doit faire un effet rigolo ;-) et puis il faut voir si les permissions et l'environnement de lancement du serveur http permettent de faire ce qui est souhaité, gérer les messages d'erreur éventuels, la réponse ou résultat de la commande,...

Je ne sais pas où poparnassus en est sur son projet, mais si j'ai bien compris ses précédents messages, c'est un peu déjà ce qu'il a déjà fait, en mettant en place un serveur tcp avec les sockets sur Rapsberry, qui répond à un client Windows pour piloter son engin. Je suppose que si maintenant il veut un terminal intégré à son application, c'est qu'il a besoin ... d'un terminal, mais j'ai peut-être mal compris, et c'est à lui de voir de toutes façons...

Bonne journée :-)
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 15 mai 2017 à 11:30
Salut poparnassus,

En fonction de ce que tu veux faire, tu peux lancer Putty avec des options de ligne de commande, si tu veux avoir l'interface graphique de Putty à ta disposition, et utiliser Pagent pour automatiser l'authentification avec un certificat.

https://the.earth.li/~sgtatham/putty/0.69/htmldoc/Chapter3.html#using

Si tu veux juste envoyer des commandes et fermer la session ssh, tu peux utiliser Plink.

https://the.earth.li/~sgtatham/putty/0.69/htmldoc/Chapter7.html#plink

Plink travaille avec stdin et stdout, ce qui fait que tu peux aussi t'en servir pour construire ta propre interface pour ta session ssh au delà du simple envoi de commandes ponctuelles. Tu peux alors piloter une session à partir de ton application, en envoyant ce que tu veux sur le stdin du processus plink.exe lancé par ton programme, et en récupérant le stdout qu'il renvoie.

https://the.earth.li/~sgtatham/putty/0.69/htmldoc/AppendixA.html#faq-embedding
https://docs.microsoft.com/en-us/windows/win32/procthread/creating-a-child-process-with-redirected-input-and-output?redirectedfrom=MSDN

Utiliser Pagent pour automatiser l'authentification est aussi utile avec Plink.


Dal
0
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30
Modifié le 20 mai 2017 à 18:08
Bonjour,

Mon interface est développer en C, avec la SDL2.0 et communique via les Socket sur le raspberry, sur lequel je code un serveur en python. Le serveur python relais les commande de controle moteur et capteur à la carte arduino (coder en C).


le protocole ssh me sers uniquement à administrer le systeme du raspberry (uniquement en mode console), donc de cette maniere je peux modifier le code source du serveur qui communique avec mon interface, ou modifier le programme qui sert a uploader le codede l'arduino, ou installer de nouveau paquet sur le raspb, etc.

Il faut savoir que pour controler mes moteurs j'utilise les pins du raspberry, mais, le probleme que j'ai rencontrer c'est pour uploader le programme C de la carte arduino depuis le raspberry, qui m'oblige a utiliser un cable usb (connecter entre le raspb et l'arduino en usb).

Actuellement je suis sur le programme python, qui n'est pas encore opérationnel.

je ne sais pas quel solution est la plus adapter pour le ssh
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
23 mai 2017 à 14:27
le protocole ssh me sers uniquement à administrer le systeme du raspberry (uniquement en mode console), donc de cette maniere je peux modifier le code source du serveur qui communique avec mon interface, ou modifier le programme qui sert a uploader le codede l'arduino, ou installer de nouveau paquet sur le raspb, etc.

Donc tu as besoin d'un terminal et seulement en cours de développement et pour administrer et faire des choses que ne fera pas l'utilisateur.

Alors pourquoi veux-tu l'intégrer à ton interface qui, elle, est destinée à l'utilisateur ?
0