![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd |
Omdöme:
|
Visningslägen |
|
|
|
||||
|
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. |
|
||||
|
|
|
||||
|
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; |
|
||||
|
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 |
|
||||
|
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); ) |
![]() |
| Komihåglista |
| Thread Tools | Sök i denna tråd |
| Visningslägen | Betygsätt denna tråd |
|
|