Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2465 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Client telnet

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Client telnet

n°1556577
yartempion
Posté le 07-05-2007 à 16:19:58  profilanswer
 

Bonjour,
Et oui merevoila avec mon client telnet.
Il fonctionne mais a quelques imperfections.
Je vous fournis mon code source.

Code :
  1. #include<stdio.h>
  2. #include<sys/socket.h>
  3. #include<sys/types.h>
  4. #include<netinet/in.h>
  5. #include<netdb.h>
  6. #include<arpa/inet.h>
  7. #include<unistd.h>
  8. #include<termios.h>
  9. #include<sys/time.h>
  10. #include<stdlib.h>
  11. #include<fcntl.h>
  12. #include <errno.h>
  13. #include<signal.h>
  14. #include<term.h>
  15. #include<ctype.h>
  16. #define LG_BUFFER=1
  17. /*#define ETIMEDOUT=30*/
  18. /*negociation de depart*/
  19. MSG_DE_NEGO(socket1)
  20. {
  21. unsigned char mesg_nego[7];
  22. printf("\ndemande des negos initiales\n\n" );
  23. printf("\nDO ECHO" );
  24. mesg_nego[0]=255;
  25. mesg_nego[1]=253;/*DO*/
  26. mesg_nego[2]=1;/*ECHO*/
  27. mesg_nego[3]=0;
  28. write(socket1,mesg_nego,3);
  29. printf("\nDO SUPPRESS GO AHEAD" );
  30. mesg_nego[2]=3;/*SUPPRESS GO AHEAD*/
  31. write(socket1,mesg_nego,3);
  32. mesg_nego[1]=251;/*WILL*/
  33. printf("\nWILL TERMINAL TYPE" );
  34. mesg_nego[2]=24;/*TERMINAL TYPE*/
  35. write(socket1,mesg_nego,3);
  36. printf("\nWILL NAWS" );
  37. mesg_nego[2]=31;/*TAILLE TERMINAL NAWS*/
  38. write(socket1,mesg_nego,3);
  39. mesg_nego[2]=32;/*TERMINAL SPEED*/
  40. /*write(socket1,mesg_nego,3);*/
  41. mesg_nego[2]=33;/* REMOTE FLOW CONTROL */
  42. /*write(socket1,mesg_nego,3);*/
  43. /*mesg_nego[1]=250;*/
  44. /*mesg_nego[3]=1;*/
  45. /*mesg_nego[4]=255;*/
  46. /*mesg_nego[5]=240;*/
  47. /*write(socket1,mesg_nego,3);*/
  48. printf("\n\n" );
  49. }
  50. /*lancement des options de session*/
  51. LANCEMENT (socket1)
  52. {
  53. }
  54. /*procedure de negociation d'option telnet*/
  55. NEGOCIATION (buffer_RX,socket1,i)
  56. {
  57. unsigned char *mess_nego11,*rep_mess_nego1;
  58. int socket11,j,k;
  59. /*int socket1;*/
  60. socket11=socket1;
  61. j=i;
  62. rep_mess_nego1=mess_nego11=buffer_RX;
  63. printf("\n\n\nDebut de nego" );
  64. printf("\nvaleur de j=%d \n valeur des octets reçus:  ",j);
  65. for(k=0;k<j+1;k++)
  66. printf("\noctet %d= %d  ",k,*(mess_nego11+k));
  67. /*printf("\nN° traitement des  types de message %d  %d %d valeur de la socket %d",*mess_nego11,*(mess_nego11+1),*(mess_nego11+2),socket1);*/
  68. switch(*(mess_nego11+1))
  69. {
  70. case 250:
  71. printf("\nSB %d demande de sous negociation",*(mess_nego11+1));
  72. SOUS_OPTION_NEGOCIEE(mess_nego11,socket11);
  73. break;
  74. case 251:
  75. printf("\nWILL %d demande de negociation",*(mess_nego11+1));
  76. OPTION_NEGOCIEE(mess_nego11,socket11);
  77. break;
  78. case 252:
  79. printf("\nWONT %d refus de negociation",*(mess_nego11+1));
  80. OPTION_NEGOCIEE(mess_nego11,socket11);
  81. *(rep_mess_nego1+1)=254;
  82. write(socket1,rep_mess_nego1,3);
  83. printf("\nReponse a WONT = %d",*(rep_mess_nego1+1));
  84. break;
  85. case 253: printf("\nDO %d demande de negociation",*(mess_nego11+1));
  86. OPTION_NEGOCIEE(mess_nego11,socket11);
  87. break;
  88. case 254: printf("\nDONT %d refus de negociation",*(mess_nego11+1));
  89. OPTION_NEGOCIEE(mess_nego11,socket11);
  90. *(rep_mess_nego1+1)=252;
  91. write(socket1,rep_mess_nego1,3);
  92. printf("\nReponse a WONT = %d",*(rep_mess_nego1+1));
  93. break;
  94. default: printf("\nErreur de traitement sur negociation N° option %d",*(mess_nego11+1));
  95. break;
  96. }
  97. }
  98. /*N° d'option a negocier*/
  99. OPTION_NEGOCIEE(mess_nego11,socket11)
  100. {
  101. struct termios terminal_out;
  102. speed_t speed_o,speed_i;
  103. int socket12,i;
  104. unsigned char *mess_nego12;
  105. socket12=socket11;
  106. mess_nego12=mess_nego11;
  107. printf("\nProcedure OPTION_NEGOCIEE" );
  108. switch (*(mess_nego12+2))
  109. {
  110. case 1:
  111.  {
  112. printf ("\n Option ECHO" );
  113. if (*(mess_nego12+1)==253)
  114.  {
  115.  printf("\nreponse %d %d %d %d",*(mess_nego12+0),*(mess_nego12+1)=252,*(mess_nego12+2),*(mess_nego12+3));
  116.  i=write(socket11,mess_nego12,4);
  117.  }
  118. }
  119. break;
  120. case 3: {
  121. printf ("\n Option GA" );
  122. }
  123. break;
  124. case 24:
  125. {
  126. printf ("\n Option Terminal type" );
  127. /*printf ("\n Option Terminal type sens de requet %d %d %d %d",*(mess_nego12+0),*(mess_nego12+1),*(mess_nego12+2),*(mess_nego12+3));*/
  128. *(mess_nego12+1)=251;
  129. i=write(socket11,mess_nego12,3);
  130. /*printf("\nReponse envoyee i= %d, %d %d %d %d",i,*(mess_nego12+0),*(mess_nego12+1),*(mess_nego12+2),*(mess_nego12+3));*/
  131. }
  132. break;
  133. case 31: {
  134. printf("\nOption NAWS" );
  135. /*printf("\nEnvoie de la sous option direct" );*/
  136. if((mess_nego12=realloc(mess_nego12,10*sizeof(unsigned char)))==NULL)
  137. printf("\nrealloc echouee sur SB 31" );
  138. *(mess_nego12+0)=255;
  139. *(mess_nego12+1)=250;
  140. *(mess_nego12+2)=31;
  141. *(mess_nego12+3)=0;
  142. *(mess_nego12+4)=80;
  143. *(mess_nego12+5)=0;
  144. *(mess_nego12+6)=24;
  145. *(mess_nego12+7)=255;
  146. *(mess_nego12+8)=240;
  147. /*printf("\nmessage a envoye %d %d %d %d %d %d %d %d",*(mess_nego12+0),*(mess_nego12+1),*(mess_nego12+2),*(mess_nego12+3),*(mess_nego12+4),*(mess_nego12+5),*(mess_nego12+6),*(mess_nego12+7));*/
  148. i=write(socket11,mess_nego12,9);
  149. /*printf("\nReponse NAWS envoyee" );*/
  150. }
  151. break;
  152. /*case 32:
  153. {
  154.  printf("\nOption Terminal speed" );*/
  155.  /*printf("\nSous option Terminal speed N° 32" );*/
  156.  /*printf ("\n Option Terminal speed sens de requet %d",*(mess_nego12+3));*/
  157.  /*}*/
  158. /*break;*/
  159. case 33: {
  160. printf ("\nOption LFLOW" );
  161. if (*(mess_nego12+1)==253)
  162. {
  163. if((mess_nego12=realloc(mess_nego12,6*sizeof(unsigned char)))==NULL)
  164. printf("\n Erreur fatal reallocation de memoire OPTION_NEGOCIEE N° 33" );
  165. *(mess_nego12+0)=255;
  166. *(mess_nego12+1)=250;
  167. *(mess_nego12+2)=33;
  168. *(mess_nego12+3)=1;
  169. *(mess_nego12+4)=255;
  170. *(mess_nego12+5)=240;
  171. /*printf("\nReponse %d %d %d ",*(mess_nego12+0),*(mess_nego12+1),*(mess_nego12+2));*/
  172. i=write(socket12,mess_nego12,6);
  173. printf("\nMessage reponse envoyé %d %d %d %d %d %d ",*(mess_nego12+0),*(mess_nego12+1),*(mess_nego12+2),*(mess_nego12+3),*(mess_nego12+4),*(mess_nego12+5));
  174. }
  175. }
  176. break;
  177. /*case 36: printf("\nOption d'environnement" );*/
  178. /*break;*/
  179. default:
  180. {
  181. printf("\noption inconnue ou non negociee\nnombre de carateres de mess_nego recu %d:",sizeof(mess_nego12));
  182. for(i=0;i<sizeof(mess_nego12);i++)
  183. printf(" i=%d mess_nego= %d",i,*(mess_nego12+i));
  184. if (*(mess_nego12+1)==251)
  185. *(mess_nego12+1)=254;
  186. else
  187. *(mess_nego12+1)=252;
  188. printf("\nreponse envoyee: " );
  189. for(i=0;i<sizeof(mess_nego12);i++)
  190. printf(" i=%d mess_nego= %d",i,*(mess_nego12+i));
  191. write(socket12,mess_nego12,sizeof(mess_nego12));
  192. printf("\nwrite passe" );
  193. }
  194. break;
  195. free(mess_nego12);
  196. }
  197. }
  198. /*Sous option negociee*/
  199. SOUS_OPTION_NEGOCIEE(mess_nego11,socket11)
  200. {
  201. int i,j;
  202. unsigned char *terminal,*mess_nego13,*rep_mess_nego,*vitesse,DEB_SB,FIN_SB,donnee[4];
  203. struct termios terminal_out;
  204. speed_t speed_o,speed_i;
  205. mess_nego13=mess_nego11;
  206. DEB_SB=250;
  207. FIN_SB=240;
  208. donnee[0]="9";
  209. donnee[1]="6";
  210. donnee[2]="0";
  211. donnee[3]="0";
  212. printf("\nProcedure SOUS_OPTION_NEGOCIEE sous option a negocier valeur de la SB %d",*(mess_nego13+2));
  213. switch (*(mess_nego13+2))
  214. {
  215. case 24:{
  216. /*Recuperation d'info sur le treminal*/
  217. printf("\nSous option Type de terminal actuel: %s,\nlongueur de la chaine terminal %d,\nsizeof de messnego13 %d,\nstrlen+sizeof %d,\nstrlen de messnogo13  %d",terminal=getenv("TERM" ),strlen(terminal),sizeof(mess_nego13),i=(strlen(terminal)+strlen(mess_nego13)),strlen(mess_nego13));
  218. printf("\nsequence recue taille du message %d %d %d  %d %d %d",*(mess_nego13+0),*(mess_nego13+1),*(mess_nego13+2),*(mess_nego13+3),*(mess_nego13+4),*(mess_nego13+5));
  219. if((mess_nego13=realloc(mess_nego13,(i+1)*sizeof(unsigned char)))==NULL)
  220. printf("\nrealloc echouee sur SB 24" );
  221. printf("\ntaille de mess_nego13 %d",strlen(mess_nego13));
  222. if((terminal=(char*) calloc (strlen(getenv("TERM" )),sizeof (char)))==NULL)
  223. printf("\nImpossible d'allouer la memoire terminal" );
  224. terminal=getenv("TERM" );
  225. *terminal=toupper(*terminal);
  226. printf("\nterminal =%s",terminal);
  227. /*strcpy(terminal,getenv("TERM" );*/
  228. toupper(*terminal);
  229. printf("\nContenu de terminal :%s",*terminal);
  230. printf("\nen majuscule" );
  231. for(j=0;j<(strlen(getenv("TERM" )));j++)
  232. {
  233. *(terminal+j)=toupper(*(terminal+j));
  234. printf("%d %c",j,*(terminal+j));
  235. }
  236. strcat(mess_nego13,terminal);
  237. printf("\nsequence du message modifié %d %d %d %d %d %d ",*(mess_nego13+0),*(mess_nego13+1),*(mess_nego13+2),*(mess_nego13+3)=0,*(mess_nego13+4),*(mess_nego13+5));
  238. printf("\nchaine de terminal %s",terminal);
  239. memmove((mess_nego13+4),terminal,strlen(terminal)+1);
  240. printf("\nsequence recue modifiee %d %d %d %d %c%c%c%c%c%c %d %d %d",*(mess_nego13+0),*(mess_nego13+1),*(mess_nego13+2),*(mess_nego13+3)=0,*(mess_nego13+4),*(mess_nego13+5),*(mess_nego13+6),*(mess_nego13+7),*(mess_nego13+8),*(mess_nego13+9),*(mess_nego13+10)=255,*(mess_nego13+11)=240,*(mess_nego13+12)=0);
  241. i=write(socket11,mess_nego13,13);
  242. printf("\nnombre de caracteres ecris= %d\n",i);
  243. i=write(1,"mess_nego13",13);
  244. printf("\ndeuxieme valeur de i=%d",i);
  245. free (mess_nego13);
  246. }
  247. break;
  248. case 32:{
  249. /*printf("\nSous option Terminal speed" );
  250. printf("\nsequence recue taille du message %d %d %d %d %d %d %d %d",*(mess_nego13+0),*(mess_nego13+1),*(mess_nego13+2),*(mess_nego13+3),*(mess_nego13+4),*(mess_nego13+5),*(mess_nego13+6),strlen(mess_nego13));
  251. printf("\nRecuperation de la vitesse du terminal" );*/
  252. tcgetattr(STDIN_FILENO,&terminal_out);
  253. speed_o=cfgetospeed(&terminal_out);
  254. /*printf("\nvitesse du terminal en out %d",speed_o);*/
  255. if((mess_nego13=realloc(mess_nego13,(strlen(mess_nego13)+11)*sizeof(unsigned char)))==NULL)
  256. printf("\nrealloc echouee sur SB 32" );
  257. /*printf("\nmodification du *(mess_nego13+3) %d",*(mess_nego13+3)=0);*/
  258. i=write(1,"mess_nego13",13);
  259. free (mess_nego13);
  260. }
  261. break;
  262. case 33:{
  263. printf("\nSous option LFLOW" );
  264. printf("\nsequence recue taille du message %d %d %d %d %d %d\n",*(mess_nego13+0),*(mess_nego13+1),*(mess_nego13+2),*(mess_nego13+3),*(mess_nego13+4),*(mess_nego13+5));
  265. }
  266. break;
  267. case 36: printf("\nSous option environnement" );
  268. break;
  269. default: printf("\nSous option non negociee" );
  270. break;
  271. }
  272. }
  273. /*timeout sur connect*/
  274. TIMEOUT()
  275. {
  276. printf("\nDelai d'attente depasse 30s d'ecoule\n\n" );
  277. raise(SIGTERM);
  278. }
  279. extern int errno;
  280. /*DEBUT DE LA ROUTINE PRINCIPALE*/
  281. main(argc,argv)
  282. int argc;
  283. char **argv;
  284. {/*Debut du main*/
  285. unsigned char *buffer_RX,*buffer_TX;
  286. unsigned char *mess_nego;
  287. int socket1,connection,deblocage,nb_lu,nb_ec,i,j,k,flag_nego_option,fdisset,verif_select;
  288. int var_etat,etat;
  289. struct sockaddr_in addr_distant;
  290. struct servent *service_distant;
  291. struct termios term_initial,term_com,sock_ini,sock_com;
  292. struct timeval delai;
  293. struct sigaction delai_av,delai_ap,act_time;
  294. fd_set set;
  295. flag_nego_option=0;
  296. /*Preparation des parametres de  connection*/
  297. printf("\nadresse %s",argv[1]);
  298. service_distant=getservbyname("telnet","tcp" );
  299. memset(&addr_distant,0,sizeof(struct sockaddr_in));
  300. addr_distant.sin_family=PF_INET;
  301. addr_distant.sin_port=htons(service_distant->s_port);
  302. if((inet_aton(argv[1],&addr_distant.sin_addr.s_addr))==0)
  303. printf("\nimpossible de remplir le  champ s_addr" );
  304. printf("\nvaleur apres inet_aton() \t%08X",ntohl(addr_distant.sin_addr.s_addr));
  305. /*Creation du point de communicatio*/
  306. printf("\ncration de la socket" );
  307. if((socket1=socket(AF_INET,SOCK_STREAM,0))<0)
  308. printf("\nCreation de socket echouee" );
  309. printf("\nNumero de socket \t%d",socket1);
  310. /*Mis en place du mode non bloquant pour la socket*/
  311. printf("\nDeblocage de la socket" );
  312. if((fcntl(socket1,F_SETFL,O_NONBLOCK))<0)
  313. printf("\nProbleme sur fcntl" );
  314. printf("\naddr_distant.sin_family \t%d",addr_distant.sin_family);
  315. printf("\naddr_distant.sin_port\t%d",addr_distant.sin_port);
  316. printf("\naddr_distant.sin_addr.s_addr\t%s\n",inet_ntoa(addr_distant.sin_addr.s_addr));
  317. /*Procedure de mis en place du mode non bloquant sur stdin*/
  318. tcgetattr(STDIN_FILENO,&term_initial);
  319. tcgetattr(STDIN_FILENO,&term_com);
  320. term_com.c_iflag &=ICRNL;
  321. term_com.c_lflag &=~ICANON;/*,ECHONL,ICANON,IEXTEN);*/
  322. term_com.c_lflag &=~ECHO;
  323. term_com.c_cc[VTIME]=0;
  324. term_com.c_cc[VMIN]=0;
  325. if(tcsetattr(STDIN_FILENO,TCSANOW,&term_com)!=0)
  326. printf("\ntransformation du terminal echoue" );
  327. printf("\nPasssage du terminal en mode brut OK" );
  328. /*Preparation du timer de connexion echouee*/
  329. printf("\ntentative de connection %d etat = %d",connection=-1,var_etat=0);
  330. act_time.sa_handler=TIMEOUT;
  331. act_time.sa_flags=0;
  332. deblocage=sigaction(SIGALRM,&act_time,0);
  333. var_etat=alarm(10);
  334. printf("\nDelai d'attente fixe a %d",var_etat);
  335. /*Connection au point distant avec 30 secs de delai max*/
  336. etat=-1;
  337. while(connection!=0)
  338. {
  339. connection=connect(socket1,(struct sockaddr*)&addr_distant,sizeof(addr_distant));
  340. if (errno==EINPROGRESS&&etat!=1)
  341. printf("\nDemande de connection  Changement de var_etat=%d\n",etat=1);
  342. if (errno==EALREADY&&etat!=2)
  343. printf("\nDemande de connection en cours connect %d valeur de errno %s %d de etat=%d",connection,strerror(errno),errno,etat=2);
  344. if(errno==234)
  345. {
  346. var_etat=alarm(0);
  347. printf("\nconnection OK=%d valeur etat %d",connection=0,etat=3);
  348. }
  349. if(connection==0&&etat!=3)
  350. {
  351. var_etat=alarm(0);
  352. printf("\nconnection OK=%d valeur du timeout %d",connection=0,ETIMEDOUT);
  353. }
  354. }/*fin de tentative de Connection au point distant*/
  355. MSG_DE_NEGO(socket1);
  356. /*on ebtre dans la boucle de communication*/
  357. while(connection ==0)
  358. {/*Debut du while 1*/
  359. /*Initialisation de l'ensemble des descripteurs a multiplexer*/
  360. FD_ZERO (&set);
  361. FD_SET (socket1,&set);
  362. FD_SET (STDIN_FILENO,&set);
  363. /*Selection de l'ensemble des descripteurs a multiplexer en reception*/
  364. if((verif_select=select(socket1+1,&set,&set,NULL,&delai))<0)
  365. break;
  366. if(verif_select>3)
  367. printf("\nvaleur de verif_select = % d",verif_select);
  368.       if(FD_ISSET(STDIN_FILENO,&set))
  369.      
  370. {/*Debut du if*/
  371. /*Initialisation d un bloc memoire pour un caractere*/
  372. if((buffer_RX=(char*) calloc (LG_BUFFER,sizeof (char)))==NULL)
  373. printf("\nImpossible d'allouer la memoire buffer_RX STDIN_FILENO" );
  374. else memset(buffer_RX,NULL,sizeof (char));
  375. nb_lu=0;
  376. if((nb_lu=read(STDIN_FILENO,buffer_RX,LG_BUFFER))<0)
  377. printf("\nerreur sur lecture d'entree ou rien a ecrire retour de nb_lu %d",nb_lu);
  378. if(nb_ec=write(socket1,buffer_RX,nb_lu))
  379. printf ("\nun caractere ecrit sur socket %d",*buffer_RX);
  380. free(buffer_RX);
  381. }/*Fin du if*/
  382. if(FD_ISSET(socket1,&set))
  383. {/*Debut du if*/
  384. if((buffer_RX=(unsigned char*) calloc (LG_BUFFER,sizeof (unsigned char)))==NULL)
  385. printf("\nImpossible d'allouer la memoire buffer_RX pour socket1" );
  386.  nb_lu=0;
  387.  i=0;
  388.  while((nb_lu=recv(socket1,buffer_RX,LG_BUFFER))>=0)
  389.  {/*Debut du while*/
  390.  if(nb_lu==0)
  391.  printf("\nValeur de connection = %d connection fermee par le distant",connection=1);
  392.    if(buffer_RX[0]==255)
  393.    {/*Un caractere IAC est arrive*/
  394.    i=1;
  395.    flag_nego_option=1;
  396.    /**mess_nego=*buffer_RX;*/
  397.     while(flag_nego_option==1)
  398.     {/*debut du while*/
  399.     /*printf ("\nvaleur de i=%d",i);*/
  400.     if((buffer_RX=realloc(buffer_RX,(i+1)*sizeof(unsigned char)))==NULL)
  401.     printf("\nErreur sur attribution memoire" );
  402.     nb_lu=read(socket1,buffer_RX+i,LG_BUFFER);
  403.      if(*(buffer_RX+i)>=236 && *(buffer_RX+i)<255)
  404.      { /*Phase de test 250>IAC<255*/
  405.      ++i;
  406.      if((buffer_RX=realloc(buffer_RX,(i+1)*sizeof(unsigned char)))==NULL)
  407.      printf("\nErreur sur attribution memoire" );
  408.      nb_lu=read(socket1,buffer_RX+i,LG_BUFFER);
  409.       if(buffer_RX[i-1]==250)/*detection de SB*/
  410.       {
  411.        do/*lecture jusqu'a SE*/
  412.        {
  413.        ++i;
  414.        if((buffer_RX=realloc(buffer_RX,(i+1)*sizeof(unsigned char)))==NULL)
  415.        printf("\nErreur sur attribution memoire" );
  416.        nb_lu=read(socket1,buffer_RX+i,LG_BUFFER);
  417.        }while(buffer_RX[i]!=240);
  418.       }
  419.      *(buffer_RX+(i+1))=0;
  420.      NEGOCIATION(buffer_RX,socket1,i);
  421.      }
  422.     flag_nego_option=0;
  423.     free(buffer_RX);
  424.     /*printf("\nle free(mes_nego) est ok valeur de l'adresse mess_nego %d %d\n",mess_nego,*mess_nego);*/
  425.     memset(buffer_RX,0,strlen(buffer_RX));
  426.     ++i;
  427.     } /*fin de while(flag_nego_option)*/
  428.     /*printf("\nfin du if(buffer_RX[0]==255)" );*/
  429.    } /*fin de if(buffer_RX[0]==255)*/
  430.    else
  431.    {/*Debut du else*/
  432.    printf(
  433.    write(STDOUT_FILENO,buffer_RX,nb_lu);
  434.    } /*Fin du else*/
  435.  nb_lu=0;
  436.  }/*fin du while((nb_lu=recv(socket1,buffer_RX,LG_BUFFER))>0)*/
  437.  free(buffer_RX);
  438.  memset(buffer_RX,0,strlen(buffer_RX));
  439. }/*Fin du if*/
  440. }/*Fin du while connection*/
  441. printf("\nSortie de boucle sans raison nb_lu = %d",nb_lu);
  442. close(socket1);
  443. if((tcsetattr(STDIN_FILENO,TCSANOW,&term_initial))!=0)
  444. printf("\nremeise en etat du stdin echoue\n" );
  445. printf ("\nSortie du prog\n" );
  446. }/*fin du main*/


 
Quand je le lance ce client telnet je constate des defaut et je ne comprends pas pourquoi.
login: ^@^@^@^@^@^@^@^@
pourquoi au momment de demander le login une suite de caracters est envoyé ce qui m'oblige a taper deux fois le login password?

mood
Publicité
Posté le 07-05-2007 à 16:19:58  profilanswer
 

n°1570600
yartempion
Posté le 05-06-2007 à 22:08:21  profilanswer
 

Bonjour,
J'aii posé la même question sur d'autres sites et  c'est à croire que personne n'a jamais essayé d'ecrire un client telnet de sa vie.
Y'a t'il quelqu'un qui connaisse cette problématique?
Vraiment jai l'impression d'avoir epuisé le sujet sans  arrivé a trouver de solution.
A l'aide  merci même si vous ne faites que des susjections.

n°1570684
Taz
bisounours-codeur
Posté le 06-06-2007 à 09:14:59  profilanswer
 

à croire que personne n'a envie de lire ta soupe.

n°1570753
yartempion
Posté le 06-06-2007 à 10:54:45  profilanswer
 

C'est bien dommage, je pense que ça en aiderai plus d'un d'avoir un module client que l'on puisse contrloer.

n°1570754
_darkalt3_
Proctopathe
Posté le 06-06-2007 à 10:56:02  profilanswer
 

t'as passé le debugger ?


---------------
Töp of the plöp
n°1570923
yartempion
Posté le 06-06-2007 à 13:55:20  profilanswer
 

Le debuger je ne connais pas mais ça compile sans pb je pense qu'il y quelque chose que je negocie mal avec le serveur distant au niveua du control de flux.
Sur certains routeurs tout se passe bien je n'ai a taper qu'une fois le mot de passe mais la le controle de flux n'est pas négocié.
Sur d'autre ou sur des machines unix le controle de flux est négocié je dois taper deux fois le login password.
Et sur d'autre type routeur CISCO idem deux fois login password et a chaque fois c'est le login qui est incorrect. Je reçois avant chaque demande d'authentification cette petite séquence de caractéres plus ou moins longue selon les équipements que je n'arrive pas a interpréter

n°1570927
_darkalt3_
Proctopathe
Posté le 06-06-2007 à 14:02:19  profilanswer
 

Debugger alors, rien que pour suivre la cinématique exacte de ton code. C'est pas parce que ca compile que ca fonctionne, ca se saurait.


---------------
Töp of the plöp
n°1570977
yartempion
Posté le 06-06-2007 à 14:43:16  profilanswer
 

Quand je lance le programme ça fonctionne et j'obtiens le resultat escompté a un defaut prés.
Au départ je mettais des message a chaque entrée et sortie de boucle ,test ou d'appel fonction tout se passe comme prévue le seul hic c'est cette sequenceet le fait qu'il faille passer deux fois par le login password. Actuellement on peut suivre le code grace aux message qu'il renvoie a chaque etape et on peut constater que le processus s'execute comme prévu.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Client telnet

 

Sujets relatifs
[Java]Obtenir l'IP d'un clientOffice sur un poste client
comment ouvrir le client de messagerie par défaut en c# ?problème jeux devinette client/serveur
[C] Client/Serveur : tchat, envoi à tous les clientsproblème d'affichage client telnet
client telnet en cclient telnet
[socket TCP] gestion de la deconnexion d1 client telnet[Java] développer un client Telnet
Plus de sujets relatifs à : Client telnet


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR