The UNIX and Linux Forums  
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.

Go Back   Les systèmes UNIX et Linux Forums > Top Forums > High Level Programming
.
google unix.com



High Level Programming Posez vos questions à propos de C, C + +, Java, SQL, et d'autres langages de programmation ici.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
Je veux un programme de résidence du client UDP Nirmala IP Networking 1 06-10-2005 03:46 PM
L'adresse IP du client telnet vtran4270 UNIX pour les nuls Questions et réponses 1 09-12-2002 04:34 PM
Est-ce que la bibliothèque client Telnet existe? aho High Level Programming 0 09-11-2002 08:45 AM
Client Telnet IP détermination thomas.jones High Level Programming 0 08-08-2002 06:17 PM
Utilisation de client telnet de MacOSX la ligne de commande de terminal tylerl UNIX pour les nuls Questions et réponses 2 07-15-2001 10:05 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Recherche sur ce Thread Rating: Thread Rating: 1 votes, 5.00 average. Modes d'affichage
  #1 (permalink)  
Old 01-04-2002
thinker130 thinker130 is offline
Registered User
  
 

Join Date: Jan 2002
Messages: 6
Comment programmer un client telnet?

Salut, experts:
J'ai programmé un simple client telnet de SCO UNIX 5.0.5, le client a passé la pensée de la première option de négociation, mais je ne peux pas recevoir d'invite de connexion au serveur. s'il vous plaît, aidez-moi.
  #2 (permalink)  
Old 01-08-2002
thalex thalex is offline
Registered User
  
 

Join Date: Nov 2001
Posts: 33
Cochez cette http://jos.sweetcherrie.com/src/telnet.c.html
  #3 (permalink)  
Old 01-16-2002
thinker130 thinker130 is offline
Registered User
  
 

Join Date: Jan 2002
Messages: 6
vous remercier, thalex, mais je n'ai pas résolu le problème maintenant.

Dernière édition par thinker130; au 01.16.2002 04:44 AM..
  #4 (permalink)  
Old 01-16-2002
thinker130 thinker130 is offline
Registered User
  
 

Join Date: Jan 2002
Messages: 6
le fichier source (premier semestre)

Je poste les fichiers source que belows, qui comprennent tel_cli.c et tel_cli.h. Quelqu'un peut-il me dire comment puis-je obtenir l'invite de connexion et de mot de passe de l'hôte distant?

tel_cli.c:
/ / Nom: tel_cli.c
/ / Auteur: Robert
/ / Date: 03 janvier 2002 ---?
/ / Appelé: Ce module est une partie de <<Traffic données Management>> application.
/ / Objectif: Permet de connecter à la machine distante et lancer la commande sur la machine distante.
/ / Format: tel_cli $ 1
/ / Entrée: $ 1 est le nom d'hôte de la machine distante, la configuration dans le local / etc / hosts.
/ / Exemple: tel_cli 134.132.5.11 ou tel_cli lyts1
/ / Retour: aucun


# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <ctype.h>
# include <fcntl.h>
# include <termio.h>
# include <unistd.h>
# include <stdarg.h>
# include <signal.h>
# include <time.h>
# include <sys/types.h>
# include <sys/socket.h>
# include <netdb.h>
# include <netinet/in.h>
# include <sys/select.h>
# include <arpa/inet.h>
# include <stdarg.h>
# include "tel_cli.h"

# define LINELEN 256


/ / La construction comprennent l'option id, nom d'option et l'option drapeau, le drapeau indique
/ / Si le client à l'option de réponse par oui ou par non, flag \u003d\u003d 1 signifie que oui.
struct OptionFlag
(
int Id;
char * Nom;
int flag;
);
struct OptionFlag struOptionFlag [40];


extern int errno;

int create_server (int port);
int create_ftp_cli (const char * host, const char * service);
int get_reply (int sock);
int get_ts (int sock);
int connectTCP (const char * host, const char * service);
int errexit (const char * format ,...);

void sigroutine (int unused);

int ser_sock; / / le serveur de socket en attente pour le serveur ftp pour se connecter et d'accepter leur data_sock.
data_sock int \u003d 0; / / le socket de réception ou l'envoi de fichier de données.
int ctrl_sock;

int par [7];
char * gs_filename / / nom de fichier dont nous avons besoin
char * gs_omc_passwd;
int g_iFileLen / / la longueur du fichier
g_iReceivedLen int \u003d 0; / / les octets ont été reçus

unsigned char gsSendMsg [LINELEN];
unsigned char gsReceiveMsg [LINELEN];


fd_set all_fds;


/ / Principaux progrès, selon le nombre de paramètres, l'application de décider quoi faire.
int main (int argc, char * argv [])
(
char * host \u003d "lyts1"; / / hôte à utiliser si aucun fournies
char * service \u003d "telnet", / / par défaut le nom du service

switch (argc)
(
case 1:

printf ( "Usage: getfile [front-aammjj nom] \ n");
sortie (1);

case 3:
/ / service \u003d argv [2];
printf ( "Usage: getfile [front-aammjj nom] \ n");

case 2:
host \u003d argv [1];
/ / gs_omc_passwd \u003d argv [2];
/ / gs_filename \u003d argv [3];
break;

par défaut:
fprintf (stderr, "Usage: getfile [front-aammjj nom] \ n");
sortie (1);
)

FD_ZERO (& all_fds);
ctrl_sock \u003d create_telnet_cli (accueil, service);
FD_SET (ctrl_sock, & all_fds);
printf ( "ctrl_sock:% d \ n", ctrl_sock);

/ / send_command (ctrl_sock);
exit (0);
)


/ / Design: Robert
/ / Date: 03 janvier 2002 ---?
/ / Appelé: Ce module est appelé par les principaux processus.
/ / Objectif: Permet de créer un socket connecté à l'hôte spécifié, puis communiquer avec le pays hôte d'avoir des options,
/ / Envoyer le nom de login et mot de passe à l'accueil, le retour sock_id.
/ / Entrée: $ 1 (char * host): est le nom d'hôte de la machine distante.
/ / $ 2 (char * de service): est le type de service fourni par la machine distante, la configuration dans le local / etc / services.
/ / Retour: li_sock
int create_telnet_cli (const char * host, const char * service)
(
unsigned char rbuf [LINELEN]; / / buffer pour une ligne de texte
unsigned char wbuf [LINELEN]; / / buffer pour une ligne de texte
unsigned char msg [LINELEN];
unsigned char ch;
unsigned char lcOption;
int li_sock, li_count / / li_socket Descripteur, lire compter
int outchars, inchars / / caractères envoyés et reçus
int i;

printf ( "entrer en telnet_cli \ n");
li_sock \u003d connectTCP (accueil, service);
printf ( "li_socket est:% d \ n", li_sock);
bzero (wbuf, LINELEN);
bzero (rbuf, LINELEN);


sprintf (wbuf, "% c% c% c% c% c% c% c% c% c% c% c% c% c% c% c% c% c% c% c% c% c% c% c% c \ n ", IAC, DODO, 3, IAC, NE, 24, CCI, NE, 31, \
IAC, NE, 32, CCI, NE, 33, CCI, NE, 34, CCI, NE, 39, CCI, DODO, 5);
write (li_sock, wbuf, strlen (wbuf));

/ / sprintf (wbuf, "% c% c% c \ n", IAC, Wont, 37);
/ / write (li_sock, wbuf, strlen (wbuf));

tandis que ((li_count \u003d recv (li_sock, rbuf, LINELEN, 0))> \u003d 0)
(
printf ( "longueur:% d,% s \ n", li_count, rbuf);
/ / sleep (5);
if (li_count \u003d\u003d 0)
(
printf ( "socket a été fermé! \ n");
sortie (1);
)
/ / si li_count> 0, cela signifie que le socket a reçu certains caractères à partir du serveur
for (i \u003d 0; i <\u003d li_count - 1;)
(
printf ( "rbuf [% d]:% d \ n", i, rbuf [i]);
/ / sleep (2);
/ / ch \u003d rbuf [i];
/ / printf ( "% c \ n", ch);
if (rbuf [i] \u003d\u003d IAC)
(
/ / printf ( "rbuf [% d] IAC est \ n", i);
/ / gsSendMsg [i] \u003d rbuf [i];

ch \u003d rbuf [i + 1];
printf ( "% d \ n", ch);
/ / i + +;
lcOption \u003d rbuf [i + 2];
printf ( "fdsafafsafasfsafsa% d \ n", lcOption);
i \u003d i + 3;
switch (ch)
(
DODO cas:
if (lcOption \u003d\u003d AUTH)
(
printf ( "RECV AUTHENTIFICATION DO (37) \ n");
/ / sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, Wont, AUTH);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)

if (lcOption \u003d\u003d NAWS)
(
printf ( "RECV NAWS DO (31) \ n");
/ / sleep (5);
bzero (gsSendMsg, LINELEN);
////// SEND IAC SB NAWS 0 132 (132) 0 52 (52)
/ / le point clé est de trouver SB syntaxe.
sprintf (gsSendMsg, "% c% c% c% d% d% d% d% c% c \ n", IAC, SB, NAWS, 0,80,0,24, IAC, SE);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)

if (lcOption \u003d\u003d XDISPLOC)
(
printf ( "RECV XDISPLOC DO (35) \ n");
/ / sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, habitude, XDISPLOC);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)

if (lcOption \u003d\u003d OLD_ENVIRON)
(
printf ( "RECV ENVIRON VIEUX-DO (36) \ n");
/ / sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, habitude, OLD_ENVIRON);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)
if (lcOption \u003d\u003d ECHO_ON)
(
printf ( "RECV DO ECHO (1) \ n");
sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, habitude, ECHO_ON);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)
break;

DONT cas:
printf ( "ch est DONT \ n");
break;
cas:
if (lcOption \u003d\u003d ECHO_ON)
(
printf ( "RECV WILL ECHO (1) \ n");
sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, DODO, ECHO_ON);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)
break;
  #5 (permalink)  
Old 01-16-2002
thinker130 thinker130 is offline
Registered User
  
 

Join Date: Jan 2002
Messages: 6
le fichier source (la deuxième moitié tel_cli.c et tel_cli.h)

Wont cas:
break;
SB cas:
printf ( "ch est SB \ n");
sleep (5);
if (lcOption \u003d\u003d TSPEED)
(
printf ( "IAC SB RECV TERMINAL SPEED SEND (32) \ n");
printf ( "% d% d% d \ n", rbuf [i], rbuf [i + 1], rbuf [i + 2]);
/ / i \u003d i + 3;
sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c% c% d% d% d% d% c% c \ n", IAC, SB, TSPEED, IS, 38400>> 8, (38400 & 0xFF), 38400> > 8, (38400 & 0xFF), IAC, SE);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)
if (lcOption \u003d\u003d NEW_ENVIRON)
(
printf ( "RECV IAC SB NEW-ENVIRON SEND (39) \ n");
printf ( "% d% d% d \ n", rbuf [i], rbuf [i + 1], rbuf [i + 2]);
/ / i \u003d i + 3;
sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c% c% c% c \ n", IAC, SB, NEW_ENVIRON, IS, IAC, SE);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)

if (lcOption \u003d\u003d TERMINAL)
(
printf ( "IAC SB RECV ENVOYER UN TERMINAL DE TYPE (24) \ n");
printf ( "% d% d% d \ n", rbuf [i], rbuf [i + 1], rbuf [i + 2]);
/ / i \u003d i + 3;
sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c% c% s% c% c \ n", IAC, SB, NEW_ENVIRON, IS, "ANSI", IAC, SE);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
printf ( "okokok \ n");
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, DODO, ECHO_ON);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
printf ( "okokok \ n");
)
i \u003d i + 3;
break;

par défaut:
printf ( "ch est un autre caractère \ n");
break;
)

)
autre
(
/ / printf ( "ch n'est pas IAC, il ya peut-être quelques erreurs se produisent! \ n");
i + +;
)
)
)
)



tel_cli.h:

/ / code de commande telnet
# define IAC 255
# define DODO 253
# define DONT 254
# define WILL 251
# define Wont 252
# define SB 250
# define SE 240
# define EST'0 '
# define SEND'1 '
# define INFO'2 '
# define VAR'0 '
# define valeur «1»
# define ESC'2 '
# define USERVAR'3 '

/ / nom d'option "et" id "
# define ECHO_ON 1
# define GO_AHEAD 3
# define STATUS 5
# define TIMER 6
# define TERMINAL 24
# define NAWS 31
# define TSPEED 32
# define FLOW 33
# define LINEMODE 34
# define XDISPLOC 35 / / X Display Location
# define OLD_ENVIRON 36 / / Old - Variables d'environnement
# define AUTH 37
# define NEW_ENVIRON 39
  #6 (permalink)  
Old 01-16-2002
thinker130 thinker130 is offline
Registered User
  
 

Join Date: Jan 2002
Messages: 6
les fichiers source (troisième partie)

J'ai oublié d'inclure certaines fonctions nécessaires dans le fichier tel_cli.c, s'il vous plaît ajouter belowed le code source à la fin du fichier tel_cli.c.


/ * connectsock - attribuer et connecter en utilisant un socket TCP ou TCP * /
int connectsock (const char * host, const char * service, const char * transport)
/ * Arguments:
* --- D'accueil nom de l'hôte de connexion qui est souhaitée
* Service - service associé le port souhaité
* Transports --- nom de protocole de transport à utiliser ( "tcp" ou "udp")
* /
(
struct hostent * phe; / * pointeur vers l'hôte d'entrée * /
struct servent * pse; / * pointeur vers l'information sur les services d'entrée * /
struct protoent * ppe; / * pointeur vers l'entrée des informations de protocole * /
struct sockaddr_in sin, / * un point de terminaison Internet addredd * /
int s, type, / * descripteur et socket type socket * /

memset (& sin, 0, sizeof (sin));
sin.sin_family \u003d AF_INET;

/ * Nom du service à la carte le numéro de port * /
if (pse getservbyname \u003d (service, transport))
sin.sin_port \u003d pse-> s_port;
else if ((sin.sin_port \u003d htons ((u_short) atoi (service))) \u003d\u003d 0)
(
/ / errexit ( "ne peut pas obtenir \"% s \ "entrée en service \ n", service);
printf ( "ne peut pas obtenir \"% s \ "entrée en service \ n", service);
return 0;
)

/ * Carte du nom d'hôte à adresse IP, ce qui permet de dotted decimal * /
if (phe \u003d gethostbyname (host))
memcpy (& sin.sin_addr, phe-> h_addr, phe-> h_length);
else if ((sin.sin_addr.s_addr \u003d inet_addr (host)) \u003d\u003d INADDR_NONE)
(
/ / errexit ( "ne peut pas obtenir \"% s \ "protocole d'entrée \ n", transport);
printf ( "ne peut pas obtenir \"% s \ "protocole d'entrée \ n", transport);
return 0;
)

/ * Carte du protocole de transport le nom de numéro de protocole * /
if ((ppe \u003d getprotobyname (transport)) \u003d\u003d 0)
(
/ / errexit ( "ne peut pas obtenir \"% s \ "protocole d'entrée \ n", transport);
printf ( "ne peut pas obtenir \"% s \ "protocole d'entrée \ n", transport);
return 0;
)

/ * L'utilisateur de choisir un protocole de type socket * /
if (strcmp (transport, "udp") \u003d\u003d 0)
type \u003d SOCK_DGRAM;
autre
type \u003d SOCK_STREAM;

/ * Attribuer un socket * /
s \u003d socket (PF_INET, type, ppe-> p_proto);
if (s <0)
(
/ / errexit ( "ne peut pas créer de socket:% s \ n", strerror (errno));
printf ( "ne peut pas créer de socket:% s \ n", strerror (errno));
return 0;
)
/ * Connecter le socket * /
if (connect (s, (struct sockaddr *) & sin, sizeof (sin)) <0)
(
/ / errexit ( "ne peut pas se connecter à% s.% s:% s \ n", accueil, service, strerror (errno));
printf ( "Impossible de se connecter à% s.% s:% s \ n", accueil, service, strerror (errno));
return 0;
)
return s;

)


int connectTCP (const char * host, const char * service)
/ * Arguments:
* --- D'accueil nom de l'hôte de connexion qui est souhaitée
* --- Service service associé au port désiré
* /
(
retour connectsock (accueil, service, "tcp");
)




/ * --- Errexit imprimer un mesage d'erreur et la sortie * /

/ * VARARGS1 * /

int errexit (const char * format ,...)
(
va_list args;
va_start (args, format);
vfprintf (stderr, format, args);
va_end (args);
sortie (1);
)
  #7 (permalink)  
Old 01-16-2002
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9111
Re: Comment programmer un client telnet?

Citation:
Originally posted by thinker130
Salut, experts:
J'ai programmé un simple client telnet de SCO UNIX 5.0.5, le client a passé la pensée de la première option de négociation, mais je ne peux pas recevoir d'invite de connexion au serveur. s'il vous plaît, aidez-moi.
Je n'ai pas le temps de déboguer le code que tout ce que vous avez publié, mais je ne l'ai télécharger et l'essayer.

J'ai trouvé que si je le service de "jour", cela a fonctionné! Le service de jour n'a pas d'autre choix negiation à tous. Cela montre du doigt lors de la négociation des options. Ftp telnet a sous-ensemble de l'option de la négociation, alors j'ai essayé la mise en service de "ftp", ce qui a également échoué, mais votre programme a produit beaucoup moins de sortie de débogage.

Je suggère que vous définissez le service de "ftp" et l'option de débogage de négociation à ce sujet. Une fois que vous pouvez obtenir une invite de login de ftp, vous pouvez alors essayer telnet.
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 04:22 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0