![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread |
Avaliação:
|
Display Modes |
|
|
|
||||
|
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. |
|
||||
|
Marque esta http://jos.sweetcherrie.com/src/telnet.c.html
|
|
||||
|
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; |
|
||||
|
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 |
|
||||
|
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); ) |
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|