begin process at 2012 05 29 10:27:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Réseau & Internet

 > 

ecrire mdp sesion telnet


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

ecrire mdp sesion telnet

jeudi 21 juillet 2011 à 10:34:49 | ecrire mdp sesion telnet

Max77240

Bonjour à tous,

Je travail avec visualc++ 2008 et les windows form.
Sur ma form, j'ai un bouton permettant d'ouvrir une session telnet sur un switch, voici le code que j'ai fais:

STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

CreateProcess( TEXT("telnet.exe"),
TEXT("telnet 192.168.2.15"),
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi );

Ceci me lance une session telnet jusqu'au moment de taper le mdp. Je voudrais pouvoir le renseigner automatiquement (pour gain de temp), pour que l'utilisateur arrive directement authentifié.
J'ai essayer d'utiliser cout(), writeconsole() mais sans resultat...

Merci d'avance à ceux qui pourront m'aider.
Max
jeudi 21 juillet 2011 à 14:41:48 | Re : ecrire mdp sesion telnet

Max77240

D'après mes recherches de ce matin, ça semble assez compliqué voir impossible avec la méthode que j'utilise, le problème est le suivant:
si j'utilise une socket(car j'ai vu qu'avec une socket c'était faisable), une fois l'authentification terminé (automatiquement avec login/mdp), sera t-il possible d'ouvrir une console pour prendre la main sur le switch en question sur la session ouverte?
Merci d'avance.
Max
dimanche 30 octobre 2011 à 08:46:29 | Re : ecrire mdp sesion telnet

rt15

Membre Club Administrateur CodeS-SourceS
Bonjour,

Désolé pour la réponse tardive.
Habituellement, on utilise un pipe pour envoyer du texte à un outil en ligne de commande. Plus moche, on peut passer par un fichier et utiliser la redirection du dos (<), ce qui revient plus ou moins au même.

Mais telnet est insensible à cette stratégie. Cela est probablement dû à la façon dont il lit les entrées de l'utilisateur.

Toutefois, on trouves sur le net des vbscripts automatisant telnet via SendKeys. Le gros problème de cette méthode est que les touches sont envoyées à la fenêtre active. Autrement dit, il ne faut surtout pas que l'utilisateur fasse quoique ce soit pendant l'exécution du script, car si une autre fenêtre devient active, c'est elle qui récupérera le caractères.

Il est donc préférable d'utiliser PostMessage pour désigner la fenêtre précisément.

Le code ci-dessous ne fait que lancer un telnet, exécuter "help" et laisser la console ouverte, car je n'ai pas de serveur telnet sous la main.

Application GUI en C.
Pour compiler sous gcc, ajouter -nostartfiles -nodefaultlibs -nostdlib -ffreestanding dans les options du lieur.
Pour compiler sous VC, s'arranger pour que le lieur ignore toutes les librairies par défaut (/nodefaultlib).
Sous VC, en cas d'erreur LNK2001 : __chkesp symbole externe non résolu -> Enlever /GZ des options de compilation
Code C/C++ :
#ifdef UNICODE
#define _T(x) L ## x
typedef unsigned short TCHAR;
#else
#define _T(x) x
typedef char TCHAR;
#endif

#include <windows.h>

HWND _hTelnetHwnd;         /* Handle de la fenêtre de telnet    */
DWORD _nTelnetPid;         /* PID de telnet                     */

DWORD __stdcall Err_ShowLast(TCHAR* lpTitle)
{
  DWORD nLastError;
  LPTSTR lpMessageBuffer;

  nLastError = GetLastError();

  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                NULL, nLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                (void*)&lpMessageBuffer, 0, NULL);

  MessageBox(NULL, lpMessageBuffer, lpTitle, MB_OK | MB_ICONERROR);

  LocalFree(lpMessageBuffer);

  return nLastError;
}

void* __stdcall Mem_Set(void* lpArea, BYTE nValue, DWORD nSize)
{
  BYTE* lpByteArea;
  DWORD nI;

  lpByteArea = (BYTE*)lpArea;
  for (nI = 0; nI < nSize; nI++)
    lpByteArea[nI] = nValue;
  return lpArea;
}

/**
 * Callback d'énumération des fenêtre pour trouver celle de la calculatrice
 */
BOOL __stdcall RetrieveTelnetWindow(HWND hwnd, LPARAM lParam)
{
  DWORD nPid;   /* Récupération du PID associé à la fenêtre                   */
  BOOL bFound;  /* Fenêtre trouvée ?                                          */

  GetWindowThreadProcessId(hwnd, &nPid);
  if (nPid == _nTelnetPid)
  {
    _hTelnetHwnd = hwnd;
    bFound = TRUE;
  }
  else
    bFound = FALSE;

  /* On arrête l'énumération si on a trouvé */
  return ! bFound;
}

void __stdcall PostString(HWND hwnd, TCHAR* lpString)
{
  int nI;
  int nLength;

  nLength = lstrlen(lpString);

  for (nI = 0; nI < nLength; nI++)
  {
    PostMessage(hwnd, WM_CHAR, lpString[nI], 0);
  }
  PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, 0);
  Sleep(10);
}

int __cdecl WinMainCRTStartup()
{
  STARTUPINFO startupInfo;
  PROCESS_INFORMATION processInfo;
  TCHAR lpCommandLine[512];         /* Le paramètre lpCommandLine de CreateProcessW ne doit pas être read-only */
  DWORD nResult;

  nResult = 1;

  /* Préparation des infos de lancement du processus avec affichage de la fenêtre */
  Mem_Set(&startupInfo, 0, sizeof(startupInfo));
  startupInfo.cb = sizeof(startupInfo);
  startupInfo.dwFlags = STARTF_USESHOWWINDOW;
  startupInfo.wShowWindow = SW_SHOW;

  /* Lancement du processus */
  lstrcpy(lpCommandLine, _T("telnet"));
  if (! CreateProcess(NULL, lpCommandLine, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInfo))
  {
    Err_ShowLast(_T("Cannot create process"));
    goto the_end;
  }

  _nTelnetPid = processInfo.dwProcessId;

  /* Récupération d'un handle sur la fenêtre de la calculatrice */
  while (_hTelnetHwnd == 0)
  {
    EnumWindows(RetrieveTelnetWindow, 0);
    Sleep(1);
  }

  PostString(_hTelnetHwnd, _T("help"));

  nResult = 0;

  CloseHandle(processInfo.hThread);
  CloseHandle(processInfo.hProcess);
the_end:
  ExitProcess(nResult);
  return 0;
}


Cette discussion est classée dans : ecrire, telnet, sizeof, pi, mdp


Répondre à ce message

Sujets en rapport avec ce message

Pb d'impression [ par cecel ] SalutJe devellope une appli qui permet d'imprimer des etiquettes sur une imprimante ZEBRA.J'utilise un driver "Generic text" car j'imprime un fichier Pipes sous windows [ par ssmint ] Bonjour à tous, Voilà je voudrais piloter CMD.EXE gràce à mon prog pour au final pouvoir réaliser une sorte de telnet...J'ai redirigé l'entrée et la s passage d'argement chaine [ par victorcoasne ] Je fais :int taille(char chaine[]){ cout return (sizeof(chaine)/sizeof(chaine[0])); }int main(){char contenu de 2 pointeurs dans un troisieme [ par ebooserge ] salut a tous,j'ai un petit pb et j'aimerais vous demander votre aide.- 3 pointeurs LPVOID a,b,c- je souhaite ecrire le contenu de a et de b dans c- on urgent [ par sendouda ] j'ai voulu exécuter une commande dos en MFC sans qu'on m'ouvre la fenêtre dos.j'ai utilisé le code suivant avec cmd ets une Cstring qui contient la co CreateProcess et processus infini [ par Rankin ] Salut à tous,Je suis en train de développer une appli qui lance pas mal de commandes système pour récupérer notamment la configuration du réseau. Pour Probleme fonction creta process [ par morgandetoi06 ] bonjour, je suis en train de faire un installeur de patch correctifs winXPmais je n arrive pas à lancer mes patch en leur passant les parametres "-q - Ecrire dans une TextView ?? [ par Vamps ] Bonjour,j'ai resolut mon pb de code touche mais je suis confronté a un autre probleme ecrire dans une TextView un char j'aimerai bien savoir si une fo Serveur Telnet C++ Aide sur IP [ par hergo ] Bonjour je suis debutant et j'aimerai savoir comment recuperer l'ip dun client qui se connect a un serveur telnet:jai recuperer ce serveur telnet si j TELNET aide sur RECV ? [ par hergo ] bonjour jai besoinr daide ssur mon serveur telnet :Je suis sous NT en language C/C++ avec Borland builder Xquand je le lance tout fonction , il attend


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,998 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales