The UNIX and Linux Forums  

Go Back   UNIX och Linux Forum > Upp Forum > High Level Programming
.
google unix.com



High Level Programming Post frågor om C, C + +, Java, SQL och andra programmeringsspråk här.

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
Jag vill ha en UDP Kundrecensioner mottagande program Nirmala IP Nätverk 1 06-10-2005 04:46
IP-adressen för telnet klient vtran4270 UNIX for Dummies Frågor & Svar 1 09-12-2002 05:34
Har Telnet klienten biblioteket finns? aho High Level Programming 0 09-11-2002 09:45
Telnet client IP bestämning thomas.jones High Level Programming 0 08-08-2002 07:17
Använda telnet klient från MacOSX kommandorad terminal tylerl UNIX for Dummies Frågor & Svar 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 Sök i denna tråd Omdöme: Thread Rating: 1 votes, 5.00 average. Visningslägen
  #1 (permalänk)  
Old 01-04-2002
thinker130 thinker130 is offline
Registered User
  
 

Join Date: Jan 2002
Inlägg: 6
Hur man programmerar en telnet klient?

Hej, Experter:
Jag har programmerat en enkel telnet klient i SCO Unix 5.0.5, har kunden gått tyckte det ursprungliga alternativet förhandling, men jag kan inte få inloggningsprompt från servern. please help me.
  #2 (permalänk)  
Old 01-08-2002
thalex thalex is offline
Registered User
  
 

Join Date: Nov 2001
Inlägg: 33
Kolla här http://jos.sweetcherrie.com/src/telnet.c.html
  #3 (permalänk)  
Old 01-16-2002
thinker130 thinker130 is offline
Registered User
  
 

Join Date: Jan 2002
Inlägg: 6
Tack, thalex, men jag har inte löst problemet nu.

Senast redigerad av thinker130; 01-16-2002 at 04:44..
  #4 (permalänk)  
Old 01-16-2002
thinker130 thinker130 is offline
Registered User
  
 

Join Date: Jan 2002
Inlägg: 6
källfilen (första halvåret)

Jag post källfilerna som belows, som omfattar tel_cli.c och tel_cli.h. Kan någon berätta för mig hur kan jag få inloggningsprompt och lösenord efterfrågas från fjärrvärden?

tel_cli.c:
/ / Namn: tel_cli.c
/ / Author: Robert
/ / Datum: Jan 03 2002 ---?
/ / Called: Denna modul är en del av <<Traffic Data Management>> ansökan.
/ / Syfte: Används för att logga in på fjärrdatorn och köra kommandot på fjärrdatorn.
/ / Format: tel_cli $ 1
/ / Input: $ 1 är värdnamnet för fjärrdatorn, config i den lokala / etc / hosts.
/ / Exempel: tel_cli 134.132.5.11 eller tel_cli lyts1
/ / Return: 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


/ / Den byggnad inkluderar alternativet id, alternativ namn och alternativ flagga visar flagg
/ / Om kunden svar på alternativet ja eller nej, flagg \u003d\u003d 1 innebär att ja.
struct OptionFlag
(
int Id;
char * namn;
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 oanvänd);

int ser_sock; / / servern uttaget väntar på ftp-servern för att ansluta och acceptera dem en data_sock.
int data_sock \u003d 0; / / uttaget för att ta emot eller skicka data fil.
int ctrl_sock;

int para [7];
char * gs_filename; / / filnamn vi behöver
char * gs_omc_passwd;
int g_iFileLen; / / längden av ärende
int g_iReceivedLen \u003d 0; / / det byte har mottagits

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


fd_set all_fds;


/ / Main framsteg i enlighet med antalet parametrar, kommer ansökan besluta vad de ska göra.
int main (int argc, char * argv [])
(
char * host \u003d "lyts1"; / / värd att använda om ingen medföljande
char * service \u003d "Telnet"; / / default tjänst namn

switch (argc)
(
Fall 1:

printf ( "Usage: getfile [front-name ÅÅMMDD] \ n");
exit (1);

fråga 3:
/ / service \u003d argv [2];
printf ( "Usage: getfile [front-name ÅÅMMDD] \ n");

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

Standard:
fprintf (stderr, "Usage: getfile [front-name ÅÅMMDD] \ n");
exit (1);
)

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

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


/ / Designer: Robert
/ / Datum: Jan 03 2002 ---?
/ / Called här modulen kallas av största process.
/ / Syfte: Används för att skapa en socket kopplas till den angivna värden, sedan kommunicera med värden som har möjligheterna,
/ / Skicka användarnamn och lösenord till värden, retur sock_id.
/ / Input: $ 1 (char * host): är den värd namnet på fjärrdatorn.
/ / $ 2 (char * service): är den typ av tjänst som tillhandahålls av fjärrdatorn, config i den lokala / etc / services.
/ / Return: li_sock
int create_telnet_cli (const char * host, const char * service)
(
unsigned char rbuf [LINELEN]; / / buffert för en textrad
unsigned char wbuf [LINELEN]; / / buffert för en textrad
unsigned char msg [LINELEN];
unsigned char ch;
unsigned char lcOption;
int li_sock, li_count; / / li_socket deskriptor, läs count
int outchars, inchars; / / tecken skickas och tas emot
int i;

printf ( "ingå telnet_cli \ n");
li_sock \u003d connectTCP (host, service);
printf ( "li_socket är:% 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, KOMMER, 24, IAC, KOMMER, 31, \
IAC, KOMMER, 32, IAC, KOMMER, 33, IAC, KOMMER, 34, IAC, KOMMER, 39, IAC, Dodo, 5);
write (li_sock, wbuf, strlen (wbuf));

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

while ((li_count \u003d recv (li_sock, rbuf, LINELEN, 0))> \u003d 0)
(
printf ( "length:% d,% s \ n", li_count, rbuf);
/ / sleep (5);
if (li_count \u003d\u003d 0)
(
printf ( "socket har stängt! \ n");
exit (1);
)
/ / om li_count> 0, så betyder det att uttaget har fått vissa tecken från servern
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)
(
fall DODO:
if (lcOption \u003d\u003d AUTH)
(
printf ( "recv DO verifiering (37) \ n");
/ / sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, VANA, AUTH);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)

if (lcOption \u003d\u003d NAWS)
(
printf ( "recv DO NAWS (31) \ n");
/ / sleep (5);
bzero (gsSendMsg, LINELEN);
////// SKICKA IAC SB NAWS 0 132 (132) 0 52 (52)
/ / det avgörande är att hitta SB syntax.
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 DO XDISPLOC (35) \ n");
/ / sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, vana XDISPLOC);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)

if (lcOption \u003d\u003d OLD_ENVIRON)
(
printf ( "recv DO OLD-ENVIRON (36) \ n");
/ / sleep (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, vana OLD_ENVIRON);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)
if (lcOption \u003d\u003d ECHO_ON)
(
printf ( "recv DO ECHO (1) \ n");
sömn (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, vana ECHO_ON);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)
break;

fall DONT:
printf ( "ch är DONT \ n");
break;
Ärendet kommer:
if (lcOption \u003d\u003d ECHO_ON)
(
printf ( "recv kommer ECHO (1) \ n");
sömn (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c \ n", IAC, Dodo, ECHO_ON);
write (li_sock, gsSendMsg, strlen (gsSendMsg));
)
break;
  #5 (permalänk)  
Old 01-16-2002
thinker130 thinker130 is offline
Registered User
  
 

Join Date: Jan 2002
Inlägg: 6
källfilen (andra halvan tel_cli.c och tel_cli.h)

fall WONT:
break;
fall SB:
printf ( "CH SB \ n");
sömn (5);
if (lcOption \u003d\u003d TSPEED)
(
printf ( "recv IAC SB TERMINAL SPEED SEND (32) \ n");
printf ( "% d% d% d \ n", rbuf [i], rbuf [i + 1], rbuf [i +2]);
/ / i \u003d i + 3;
sömn (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;
sömn (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 Type SEND (24) \ n");
printf ( "% d% d% d \ n", rbuf [i], rbuf [i + 1], rbuf [i +2]);
/ / i \u003d i + 3;
sömn (5);
bzero (gsSendMsg, LINELEN);
sprintf (gsSendMsg, "% c% c% c% c% s% c% c \ n", är IAC, SB, NEW_ENVIRON, "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;

Standard:
printf ( "ch är andra tecken \ n");
break;
)

)
annan
(
/ / printf ( "ch inte IAC, finns det kanske något fel uppstår! \ n");
i + +;
)
)
)
)



tel_cli.h:

/ / telnet kommandot code
# define IAC 255
# define DODO 253
# define DONT 254
# define KOMMER 251
# define WONT 252
# define SB 250
# define SE 240
# define är '0 '
# define SEND '1 '
# define INFO "2"
# define VAR '0 '
# define VALUE '1 '
# define ESC "2"
# define USERVAR '3 '

/ / option namn och 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 Bildskärmsplacering
# define OLD_ENVIRON 36 / / Old - Miljövariabler
# define AUTH 37
# define NEW_ENVIRON 39
  #6 (permalänk)  
Old 01-16-2002
thinker130 thinker130 is offline
Registered User
  
 

Join Date: Jan 2002
Inlägg: 6
källfilerna (tredje delen)

Jag har glömt att lägga till några funktioner som behövs i ärende tel_cli.c, vänligen bifoga belowed källkoden till slutet av filen tel_cli.c.


/ * connectsock - tilldela & ansluta ett uttag via TCP eller TCP * /
int connectsock (const char * host, const char * service, const char * transport)
/ * Argument:
* Host --- Namn på värd som förbindelse önskas
* Service - tjänster i samband med önskad port
* Transport --- namnet Transport Protocol att använda ( "tcp" eller "UDP")
* /
(
struct hostent * Phe; / * pekare till värddatorer inträde * /
struct servent * PSE; / * pekare till serviceinformation inträde * /
struct protoent * PPE; / * pekare till information om protokoll inträde * /
struct sockaddr_in synd; / * Internet endpoint addredd * /
int s, typ; / * socket deskriptor och socket typ * /

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

/ * Karttjänst namn till portnummer * /
if (PSE \u003d getservbyname (service, transport))
sin.sin_port \u003d PSE-> s_port;
else if ((sin.sin_port \u003d htons ((u_short) atoi (tjänst))) \u003d\u003d 0)
(
/ / errexit ( "Can't Get \"% s \ "tjänst inträde \ n", service);
printf ( "Can't Get \"% s \ "tjänst inträde \ n", service);
return 0;
)

/ * Karta värdnamn till IP-adress, vilket möjliggör punktdecimalform * /
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 ( "Can't Get \"% s \ "protokoll inträde \ n", transport);
printf ( "Can't Get \"% s \ "protokoll inträde \ n", transport);
return 0;
)

/ * Karta transportprotokoll namn till protokoll nummer * /
if ((PPE \u003d getprotobyname (transport)) \u003d\u003d 0)
(
/ / errexit ( "Can't Get \"% s \ "protokoll inträde \ n", transport);
printf ( "Can't Get \"% s \ "protokoll inträde \ n", transport);
return 0;
)

/ * User protokollet för att välja en socket typ * /
if (strcmp (transport, "UDP") \u003d\u003d 0)
type \u003d SOCK_DGRAM;
annan
type \u003d SOCK_STREAM;

/ * Avsätt en socket * /
s \u003d socket (PF_INET, typ, PPE-> p_proto);
if (s <0)
(
/ / errexit ( "kan inte skapa socket:% s \ n", strerror (errno));
printf ( "kan inte skapa socket:% s \ n", strerror (errno));
return 0;
)
/ * Anslut socket * /
if (connect (s, (struct sockaddr *) & sin, sizeof (sin)) <0)
(
/ / errexit ( "kan inte ansluta till% s.% s:% s \ n", värd, service, strerror (errno));
printf ( "kan inte ansluta till% s.% s:% s \ n", värd, service, strerror (errno));
return 0;
)
return s;

)


int connectTCP (const char * host, const char * service)
/ * Argument:
* Host --- Namn på värd som förbindelse önskas
* Service --- tjänst hör till önskad port
* /
(
return connectsock (host, service, "tcp");
)




/ * Errexit --- skriva ut ett felmeddelande mesage och avsluta * /

/ * VARARGS1 * /

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

Join Date: Aug 2001
Ort: Ashburn, Virginia
Inlägg: 9.124
Re: hur en telnet klient?

Citat:
Ursprungligen postat av thinker130
Hej, Experter:
Jag har programmerat en enkel telnet klient i SCO Unix 5.0.5, har kunden gått tyckte det ursprungliga alternativet förhandling, men jag kan inte få inloggningsprompt från servern. please help me.
Jag har inte tid att felsöka alla att kod som du postat, men jag gjorde ladda ner och prova det.

Jag upptäckte att om jag tjänsten på "dagtid", det funkade! Dagen har heller ingen möjlighet negiation alls. Som pekar finger åt alternativet förhandling. FTP har delmängd av telnet: s val förhandling, så jag försökte ställa in tjänsten som "ftp" och även detta misslyckades, men ditt program som produceras mycket mindre debuginformationen.

Jag föreslår att du ställer den tjänst som "ftp" och avlusa alternativet förhandling om detta. När du kan få en inloggningsprompt från ftp kan du sedan prova telnet.
Closed Thread

Komihåglista

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 12:16.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0