[C++] Communiquer avec une fenêtre Telnet
Fermé
Utilisateur anonyme
-
12 mai 2009 à 09:41
Mrlucky Messages postés 2 Date d'inscription mercredi 6 octobre 2010 Statut Membre Dernière intervention 7 octobre 2010 - 7 oct. 2010 à 15:58
Mrlucky Messages postés 2 Date d'inscription mercredi 6 octobre 2010 Statut Membre Dernière intervention 7 octobre 2010 - 7 oct. 2010 à 15:58
A voir également:
- [C++] Communiquer avec une fenêtre Telnet
- Raccourci agrandir fenetre - Guide
- Fenetre privée - Guide
- Fenêtre hors écran windows 11 - Guide
- Position adresse enveloppe fenêtre a4 word ✓ - Forum Word
- Impossible de communiquer avec votre appareil chromecast - Guide
10 réponses
Utilisateur anonyme
12 mai 2009 à 11:45
12 mai 2009 à 11:45
Je ne comprend pas quand tu dis "communiquer avec une fenêtre"
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
12 mai 2009 à 12:11
12 mai 2009 à 12:11
Salut.
Je ne pense pas que ça soit faisable si facilement.
system passe une chaine de caractère au shell, il ne redirige pas les entrées sorties.
Si tu veux pouvoir écrire sur l'entrée standard de telnet tu peut essayé popen() à la place de system(). Mais je ne suis pas sur que ça fonctionne car il me semble que telnet protège stdin (je ne sais plus par quel mécanisme).
Je pense que le mieux c'est de récupérer les sources d'un client telnet et de l'incorporer dans ton programme.
Je ne pense pas que ça soit faisable si facilement.
system passe une chaine de caractère au shell, il ne redirige pas les entrées sorties.
Si tu veux pouvoir écrire sur l'entrée standard de telnet tu peut essayé popen() à la place de system(). Mais je ne suis pas sur que ça fonctionne car il me semble que telnet protège stdin (je ne sais plus par quel mécanisme).
Je pense que le mieux c'est de récupérer les sources d'un client telnet et de l'incorporer dans ton programme.
Jette un coup d'oeil aux fonctions popen et pclose de stdio.h. Mais comme le dit Char Snippeur, avec telnet je pense pas que ça marche. Mais qui en tente rien à rien ^^. Tiens nous au courant !
char commande[16] = "dir"; char buffer[256]; FILE *ptr; if ((ptr = popen(commande, "r")) != NULL) { while (fgets(buffer, 256, ptr) != NULL) { fprintf(stdout, "%s", buffer); fflush(stdout); } pclose(ptr); } else { fprintf(stderr, "Impossible d'executer cette commande \n"); }
En fait sous Windows c'est _popen et _pclose =) je viens de tester et ça marche bien =)
#include <stdio.h> #include <iostream> #include <stdlib.h> int main(void) { char commande[16] = "dir"; char buffer[256]; FILE *ptr; if ((ptr = _popen(commande, "r")) != NULL) { while (fgets(buffer, 256, ptr) != NULL) { fprintf(stdout, "%s", buffer); fflush(stdout); } _pclose(ptr); } else { fprintf(stderr, "Impossible d'executer cette commande \n"); } system("pause"); return 0; }
Il ne faut jamais utiliser system() sous windows.
Telnet se fait notamment par les apis Win32 (demander sur le groupe pro Win32 https://groups.google.com/forum/?hl=fr#!forum/fr.comp.os.ms-windows.programmation par Google )
Telnet se fait notamment par les apis Win32 (demander sur le groupe pro Win32 https://groups.google.com/forum/?hl=fr#!forum/fr.comp.os.ms-windows.programmation par Google )
Au lieu de me dire de ne pas utiliser system pour faire une simple pause pour que la fenêtre ne se referme pas, propose quelque chose qui est en rapport avec la question posée, ton commentaire n'apporte rien !
Ou bien c'était pour le system("telnet") dans le 1er commentaire et dans ce cas je n'ai rien dit XD
Les API Win32 c'est VB etc... ?? si c'est ça, c'est vrai que c'est plus "visuel" et plus simple à coder. Après il est peut être obligé de passer en c++ pour faire d'autres choses ...
Ou bien c'était pour le system("telnet") dans le 1er commentaire et dans ce cas je n'ai rien dit XD
Les API Win32 c'est VB etc... ?? si c'est ça, c'est vrai que c'est plus "visuel" et plus simple à coder. Après il est peut être obligé de passer en c++ pour faire d'autres choses ...
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
12 mai 2009 à 15:27
12 mai 2009 à 15:27
On utilise system() si on veux d'abord !
Et plutôt que de passer par l'usine à gaz des API, autant prendre une source de client.
Pourquoi cherche tu à faire ça exactement ?
Et plutôt que de passer par l'usine à gaz des API, autant prendre une source de client.
Pourquoi cherche tu à faire ça exactement ?
On a une série d'imprimantes gérées par Unix dans mon entreprise et ceux-ci se bloquent tout le temps au bout d'un moment. Pour les débloquer, il faut se connecter avec telnet sur le serveur Unix et effectuer une série de commandes assez contraignante dans la fenêtre Telnet.
L'idée serait de réaliser un petit prog qui automatise le débloquage des imprimantes en question.
On aurait alors un petit menu (console pour débuter) qui permettrait une fois l'imprimante choisie de voir l'état de l'imprimante (READY, SENDING et DOWN selon les cas), d'avoir accès au spool Unix de l'imprimante (pour pouvoir supprimer le ou les jobs qui éventuellement coincent l'imprimante), de pouvoir désactiver et activer l'imprimante (ce qui la décoince dans le cas où se n'est pas un job le responsable).
Le but serait donc de faciliter la maintenance des imprimantes. J'aimerai faire un petit prog console en C++ pour commencer puis si le prog fonctionne et que son utilité est avérée, je programmerai une petite interface graphique avec QT.
Il faut donc que je sois capable de communiquer avec la fenêtre Telnet en question (grâce à system() je peux ouvrir une connexion Telnet sur le serveur mais ensuite pas moyen de communiquer avec la fenêtre ouverte).
Merci d'avance
L'idée serait de réaliser un petit prog qui automatise le débloquage des imprimantes en question.
On aurait alors un petit menu (console pour débuter) qui permettrait une fois l'imprimante choisie de voir l'état de l'imprimante (READY, SENDING et DOWN selon les cas), d'avoir accès au spool Unix de l'imprimante (pour pouvoir supprimer le ou les jobs qui éventuellement coincent l'imprimante), de pouvoir désactiver et activer l'imprimante (ce qui la décoince dans le cas où se n'est pas un job le responsable).
Le but serait donc de faciliter la maintenance des imprimantes. J'aimerai faire un petit prog console en C++ pour commencer puis si le prog fonctionne et que son utilité est avérée, je programmerai une petite interface graphique avec QT.
Il faut donc que je sois capable de communiquer avec la fenêtre Telnet en question (grâce à system() je peux ouvrir une connexion Telnet sur le serveur mais ensuite pas moyen de communiquer avec la fenêtre ouverte).
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
13 mai 2009 à 11:57
13 mai 2009 à 11:57
Oui, j'ai vu. C'était pour répondre à Char Snipeur.
J'essai tout de suite.
J'essai tout de suite.
Utilisateur anonyme
13 mai 2009 à 12:14
13 mai 2009 à 12:14
Si j'ai bien compris, une fois la fenêtre ouverte, pour envoyer d'autres commandes, on écrit dans le descripteur de fichier ptr ?
Tu utilises _popen en mode écriture "w", fais des essais
Il me semble que tu ne peux pas avec _popen établir une communication bidirectionnelle.
Donc il faut les enchainer...
C'est quand même compliquer en C++ et mes compétences se limite ici :S
J'ai trouvé ça (incompréhensible XD) !! https://docs.microsoft.com/en-us/windows/win32/procthread/creating-a-child-process-with-redirected-input-and-output?redirectedfrom=MSDN
Il me semble que tu ne peux pas avec _popen établir une communication bidirectionnelle.
Donc il faut les enchainer...
C'est quand même compliquer en C++ et mes compétences se limite ici :S
J'ai trouvé ça (incompréhensible XD) !! https://docs.microsoft.com/en-us/windows/win32/procthread/creating-a-child-process-with-redirected-input-and-output?redirectedfrom=MSDN
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
13 mai 2009 à 12:55
13 mai 2009 à 12:55
D'accord avec ahmet, c'est compliqué en C++. Pour manipulé telnet, j'avais vu une discussion disant, si je me souviens bien, qu'avec perl et un certain module, c'était super facile.
Il n'existe pas un service UNIX permettant la gestion des imprimante à distance ? à poser dans le forum unix comme question.
Une autre possibilité, qui serait peut être mieux point de vue sécurité, c'est de créer ton propre serveur.
En C/C++ sur UNIX tu fait un petit serveur qui manipule les imprimantes, et qui dialogue avec le client par de simples instruction.
Si tu vois ce que je veux dire. ça peut être une solution simple si le pipe ne fonctionne pas et que tu ne veux pas bricolé les sources d'un client telnet.
Il n'existe pas un service UNIX permettant la gestion des imprimante à distance ? à poser dans le forum unix comme question.
Une autre possibilité, qui serait peut être mieux point de vue sécurité, c'est de créer ton propre serveur.
En C/C++ sur UNIX tu fait un petit serveur qui manipule les imprimantes, et qui dialogue avec le client par de simples instruction.
Si tu vois ce que je veux dire. ça peut être une solution simple si le pipe ne fonctionne pas et que tu ne veux pas bricolé les sources d'un client telnet.
Utilisateur anonyme
13 mai 2009 à 13:23
13 mai 2009 à 13:23
C'est à dire que je ne peux pas vraiment modifier le système actuel. J'ai pensé à une interface qui se sert du système actuel d'où la communication telnet avec C++. Maintenant je peux manier d'autres langages, peut-être qu'avec le VB (VBA) ce serait plus simple ...
Oui pourquoi pas Visual Basic, mais il faut installer une certaine version du Framework pour l'exécuter, pas stable et la programmation avec ce langage ne ressemble à rien =)
Sinon en JAVA avec uniquement un JAR, tu peux l'exécuter où tu veux. L'avantage est que le JAVA est portable, donc il tourne aussi bien sous Windows que sous UNIX ... OK il faut installer Java, mais en général java est déjà installé dans les machines.
Avec un petit shell combiné à du Java ?
http://www.javafr.com/...
Sinon en JAVA avec uniquement un JAR, tu peux l'exécuter où tu veux. L'avantage est que le JAVA est portable, donc il tourne aussi bien sous Windows que sous UNIX ... OK il faut installer Java, mais en général java est déjà installé dans les machines.
Avec un petit shell combiné à du Java ?
http://www.javafr.com/...
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
13 mai 2009 à 14:05
13 mai 2009 à 14:05
Oublie VB.
Perl je te dit. http://www.commentcamarche.net/forum/affich 1362267 script telnet
Perl je te dit. http://www.commentcamarche.net/forum/affich 1362267 script telnet
Mrlucky
Messages postés
2
Date d'inscription
mercredi 6 octobre 2010
Statut
Membre
Dernière intervention
7 octobre 2010
7 oct. 2010 à 15:58
7 oct. 2010 à 15:58
salut tout le monde,
je suis aussi entrain d'écrire un programme qui a pour but de rebouter mon routeur et j'ai la même problème.
j'ai essayer de simuler les touche pour entrer le user et le pass mais sa marche pas. impossible de communiquer avec telnet.
je voudrait savoir si vous avez trouvez une solution.
je suis aussi entrain d'écrire un programme qui a pour but de rebouter mon routeur et j'ai la même problème.
j'ai essayer de simuler les touche pour entrer le user et le pass mais sa marche pas. impossible de communiquer avec telnet.
je voudrait savoir si vous avez trouvez une solution.
12 mai 2009 à 11:58
la connexion telnet est faite mais il demande un login et un mot de passe, il faut que le programme C++ entre ce login et ce mot de passe. Si telnet répond quelque chose, par exemple l'état d'une imprimante, il faut que mon prog puisse le récupérer pour l'afficher. En somme, il faut que mon programme puisse lire et écrire dans la fenêtre telnet.
J'espère que c'est plus clair, c'est pas évident à expliquer...