The UNIX and Linux Forums  


Go Back   O UNIX e Linux Forum > Top Fóruns > Alto Nível de programação
.
google unix.com



Alto Nível de programação Post perguntas sobre C, C + +, Java, SQL, e outras linguagens de programação aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Eu quero um programa que recebe Cliente UDP Nirmala IP Networking 1 06-10-2005 04:46
Endereço IP do cliente Telnet vtran4270 UNIX para Dummies Perguntas & Respostas 1 09-12-2002 05:34
O cliente Telnet biblioteca existem? Aho Alto Nível de programação 0 09-11-2002 09:45
Telnet IP determinação thomas.jones Alto Nível de programação 0 08-08-2002 07:17
Utilizar o cliente de telnet MacOSX terminal da linha de comando tylerl UNIX para Dummies Perguntas & Respostas 2 07-15-2001 11:05

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 Pesquisar este Thread Avaliação: Thread Rating: 1 votes, 5.00 average. Display Modes
  #1 (permalink)  
Old 01-04-2002
thinker130 thinker130 is offline
Usuário
  
 

Join Date: Jan 2002
Posts: 6
Como um programa cliente Telnet?

Oi, Peritos:
Tenho programado um simples telnet cliente em SCO Unix 5.0.5, o cliente tem a opção inicial passou pensamento negociação, mas não posso receber prompt de login do servidor. por favor me ajude.
  #2 (permalink)  
Old 01-08-2002
thalex thalex is offline
Usuário
  
 

Join Date: Nov 2001
Lugares: 33
Marque esta http://jos.sweetcherrie.com/src/telnet.c.html
  #3 (permalink)  
Old 01-16-2002
thinker130 thinker130 is offline
Usuário
  
 

Join Date: Jan 2002
Posts: 6
Obrigado, thalex, mas eu ainda não resolveu o problema até agora.

Última edição por thinker130; em 01/16/2002 04:44..
  #4 (permalink)  
Old 01-16-2002
thinker130 thinker130 is offline
Usuário
  
 

Join Date: Jan 2002
Posts: 6
o arquivo de origem (a primeira metade)

Eu postar os arquivos de origem como abaixo, que incluem tel_cli.c e tel_cli.h. Alguém pode me dizer como posso obter login e senha prompt prompt da máquina remota?

tel_cli.c:
/ / Nome: tel_cli.c
/ / Autor: Robert
/ / Data: 03 jan. 2002 ---?
/ / Chamado: Este módulo é uma parte da <<Traffic Dados Management>> aplicação.
/ / Objetivo: Utilizado para fazer login na máquina remota e executar o comando na máquina remota.
/ / Formato: tel_cli $ 1
/ / Entrada: $ 1 é o hostname da máquina remota, config no local arquivo / etc / hosts.
/ / Exemplo: tel_cli 134.132.5.11 ou tel_cli lyts1
/ / Retorno: none


# 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


/ / Incluir a construção opção id, nome e opção opção bandeira, a bandeira indica
/ / Se o cliente a opção de responder sim ou não, a bandeira \u003d\u003d 1 significa que sim.
struct OptionFlag
(
int Id;
char * Nome;
int Bandeira;
);
struct OptionFlag struOptionFlag [40];


extern int errno;

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

void sigroutine (int não utilizada);

int ser_sock; / / o servidor socket espera para o servidor FTP para se conectar e aceitá-los um data_sock.
data_sock int \u003d 0; / / o socket para receber ou enviar dados arquivo.
int ctrl_sock;

int para [7];
char * gs_filename; / / nome do arquivo, precisamos
char * gs_omc_passwd;
int g_iFileLen; / / o tamanho de arquivo
g_iReceivedLen int \u003d 0; / / os bytes tenha sido recebida

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


fd_set all_fds;


/ / Principal progresso, de acordo com o número de parâmetros, a aplicação vai decidir o que fazer.
int main (int argc, char * argv [])
(
char * host \u003d "lyts1"; / / hospedeiro para se usar nenhum oferecidos
char * \u003d serviço "telnet", / / Nome de serviço padrão

switch (argc)
(
case 1:

printf ( "Usage: GetFile [front-AAMMDD nome] \ n");
exit (1);

case 3:
/ / serviço \u003d argv [2];
printf ( "Usage: GetFile [front-AAMMDD nome] \ n");

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

default:
fprintf (stderr, "Utilização: GetFile [front-AAMMDD nome] \ n");
exit (1);
)

FD_ZERO (& all_fds);
ctrl_sock \u003d create_telnet_cli (acolhimento, de serviço);
FD_SET (ctrl_sock, & all_fds);
printf ( "ctrl_sock:% d \ n", ctrl_sock);

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


/ / Designer: Robert
/ / Data: 03 jan. 2002 ---?
/ / Chamado: Este módulo é chamado por processo principal.
/ / Objetivo: Usado para criar um conector ligado ao especificado acolhimento e, em seguida, comunicar-se com o acolhimento de ter as opções,
/ / Enviar login e senha para o acolhimento, o retorno sock_id.
/ / Entrada: $ 1 (char * host): é o nome do host da máquina remota.
/ / $ 2 (char * serviço): é o tipo de serviço prestado pela máquina remota, config no local / etc / serviços arquivo.
/ / Retorno: li_sock
int create_telnet_cli (const char * host, const char * service)
(
unsigned char rbuf [LINELEN]; / / buffer para uma linha de texto
unsigned char wbuf [LINELEN]; / / buffer para uma linha de texto
unsigned char msg [LINELEN];
unsigned char ch;
unsigned char lcOption;
int li_sock, li_count; / / li_socket descritor, leia count
int outchars, inchars; / / caracteres enviados e recebidos
int i;

printf ( "entrar em telnet_cli \ n");
li_sock \u003d connectTCP (acolhimento, de serviço);
printf ( "li_socket é:% 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, Will, 24, IAC, Will, 31, \
IAC, Will, 32, IAC, Will, 33, IAC, Will, 34, IAC, Will, 39, IAC, DODO, 5);
write (li_sock, wbuf, strlen (wbuf));

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

while ((li_count \u003d recv (li_sock, rbuf, LINELEN, 0))> \u003d 0)
(
printf ( "Comprimento:% d,% s \ n", li_count, rbuf);
/ / sleep (5);
if (li_count \u003d\u003d 0)
(
printf ( "socket foi fechado! \ n");
exit (1);
)
/ / if li_count> 0, significa que o soquete tem recebido alguns caracteres a partir do servidor
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 \ 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)
(
caso DODO:
if (lcOption \u003d\u003d AUTH)
(
printf ( "Recv FAZER AUTENTICAÇÃO (37) \ n");
/ / sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, afeito, AUTH);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)

if (lcOption \u003d\u003d NAWS)
(
printf ( "Recv DO NAWS (31) \ n");
/ / sleep (5);
bzero (gsSendMsg, LINELEN);
////// SEND IAC SB NAWS 0 132 (132) 0 52 (52)
/ / o ponto-chave é encontrar SB sintaxe.
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 FAZER XDISPLOC (35) \ n");
/ / sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, afeito, XDISPLOC);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)

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

DONT caso:
printf ( "ch é DONT \ n");
break;
caso irá:
if (lcOption \u003d\u003d ECHO_ON)
(
printf ( "Recv SERÁ ECHO (1) \ n");
sono (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
Usuário
  
 

Join Date: Jan 2002
Posts: 6
o arquivo de origem (na segunda metade tel_cli.c e tel_cli.h)

caso afeito:
break;
caso SB:
printf ( "ch é SB \ n");
sono (5);
if (lcOption \u003d\u003d TSPEED)
(
printf ( "Recv IAC SB TERMINAL DE VELOCIDADE SEND (32) \ n");
printf ( "% d% d% d \ n", rbuf [i], rbuf [i + 1], rbuf [i + 2]);
/ / i \u003d i + 3;
sono (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-NOVA ENVIRON SEND (39) \ n");
printf ( "% d% d% d \ n", rbuf [i], rbuf [i + 1], rbuf [i + 2]);
/ / i \u003d i + 3;
sono (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 ( "Recv IAC SB TERMINAL TIPO SEND (24) \ n");
printf ( "% d% d% d \ n", rbuf [i], rbuf [i + 1], rbuf [i + 2]);
/ / i \u003d i + 3;
sono (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;

default:
printf ( "ch é outro caracter \ n");
break;
)

)
diferente
(
/ / printf ( "não é ch IAC, há talvez alguns erros! \ n");
i + +;
)
)
)
)



tel_cli.h:

/ / comando telnet código
# define IAC 255
# define DODO 253
# define DONT 254
# define IRÁ 251
# define afeito 252
# define SB 250
# define SE 240
# define IS'0 '
# define SEND'1 '
# define INFO'2 '
# define VAR'0 '
# define VALUE'1 '
# define ESC'2 '
# define USERVAR'3 '

/ / opção nome e 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 FLUXO 33
# define LINEMODE 34
# define XDISPLOC 35 / / X Display Location
# define OLD_ENVIRON 36 / / Velha - Ambiente variáveis
# define AUTH 37
# define NEW_ENVIRON 39
  #6 (permalink)  
Old 01-16-2002
thinker130 thinker130 is offline
Usuário
  
 

Join Date: Jan 2002
Posts: 6
os arquivos de origem (a terceira parte)

Tenho esquecido de incluir algumas funções necessárias no arquivo tel_cli.c, por favor, anexar o belowed o código fonte para o final do arquivo tel_cli.c.


/ * connectsock - atribuir & soquete usando uma conexão TCP ou TCP * /
int connectsock (const char * host, const char * service, const char * transporte)
/ * Argumentos:
* Acolhimento --- nome de anfitrião para o qual a ligação é desejado
* Serviço - serviço associado ao porto desejado
* Transportes --- Nome do protocolo de transporte a utilizar ( "TCP" ou "UDP")
* /
(
struct hostent * fenóme; / * ponteiro para hospedar informações entrada * /
struct servent * pse; / * ponteiro para serviço de informação entrada * /
struct protoent * EPI; / * ponteiro para informações protocolo entrada * /
struct sockaddr_in sin; / * Internet um parâmetro addredd * /
int s, tipo; / * descritor socket e socket tipo * /

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

/ * Nome do serviço do Mapa para a porta série * /
if (PSE \u003d getservbyname (serviço de transporte))
sin.sin_port \u003d pse-> s_port;
else if ((sin.sin_port \u003d htons ((u_short) atoi (serviço))) \u003d\u003d 0)
(
/ / errexit ( "can't get \"% s \ "serviço de entrada \ n", o serviço);
printf ( "can't get \"% s \ "serviço de entrada \ n", o serviço);
return 0;
)

/ * Mapa nome de host para endereços IP, permitindo a dotted decimal * /
if (fenóme \u003d gethostbyname (host))
memcpy (& sin.sin_addr, fenóme-> h_addr, fenóme-> h_length);
else if ((sin.sin_addr.s_addr \u003d inet_addr (host)) \u003d\u003d INADDR_NONE)
(
/ / errexit ( "can't get \"% s \ "protocolo entrada \ n", transportes);
printf ( "can't get \"% s \ "protocolo entrada \ n", transportes);
return 0;
)

/ * Mapa transporte protocolo nome para o protocolo número * /
if ((PPE \u003d getprotobyname (transportes)) \u003d\u003d 0)
(
/ / errexit ( "can't get \"% s \ "protocolo entrada \ n", transportes);
printf ( "can't get \"% s \ "protocolo entrada \ n", transportes);
return 0;
)

/ * Protocolo ao usuário escolher um soquete tipo * /
if (strcmp (transporte, "udp") \u003d\u003d 0)
type \u003d SOCK_DGRAM;
diferente
type \u003d SOCK_STREAM;

/ * Atribuir um socket * /
s \u003d socket (PF_INET, tipo, PPE-> p_proto);
if (s <0)
(
/ / errexit ( "não pode criar socket:% s \ n", strerror (errno));
printf ( "não pode criar socket:% s \ n", strerror (errno));
return 0;
)
/ * Ligar o socket * /
if (connect (s, (struct sockaddr *) & sin, sizeof (sin)) <0)
(
/ / errexit ( "não pode se conectar a% s.% s:% s \ n", host, serviço, strerror (errno));
printf ( "não pode se conectar a% s.% s:% s \ n", host, serviço, strerror (errno));
return 0;
)
return s;

)


int connectTCP (const char * host, const char * service)
/ * Argumentos:
* Acolhimento --- nome de anfitrião para o qual a ligação é desejado
* --- Serviço associado com o serviço desejado porto
* /
(
retorno connectsock (acolhimento, atendimento, "TCP");
)




/ * --- Errexit imprimir um erro mesage e saída * /

/ * VARARGS1 * /

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

Join Date: Aug 2001
Localização: Ashburn, Virginia
Mensagens: 9.127
Re: Como um programa cliente Telnet?

Citação:
Originalmente postado por thinker130
Oi, Peritos:
Tenho programado um simples telnet cliente em SCO Unix 5.0.5, o cliente tem a opção inicial passou pensamento negociação, mas não posso receber prompt de login do servidor. por favor me ajude.
Eu não tenho o tempo para depurar todos os que o código que você postou, mas eu fiz download e experimentar.

Achei que se eu definir o serviço de "dia", que funcionou! O dia de serviço não tem opção negiation at all. Que aponta o dedo a opção negociação. Ftp tem subconjunto do telnet da opção negociação, então eu tentei configurar o serviço de "ftp" e isso também não, mas o seu programa produzido muito menos depurar saída.

Sugiro que você definir o serviço como "ftp" e depurar a opção em que a negociação. Uma vez que você pode obter um login prompt de ftp, você pode tentar telnet.
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 02:11.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0