![]() |
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| High-Level-Programmierung Post Fragen zu C, C + +, Java, SQL, und andere Programmiersprachen hier. |
Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
|
||||
| Faden | Thread Starter | Forum | Antworten | Last Post |
| Ich möchte, dass ein UDP-Client-Programm erhalten | Nirmala | IP-Networking | 1 | 06-10-2005 04:46 PM |
| IP-Adresse des Telnet-Client | vtran4270 | UNIX for Dummies Questions & Answers | 1 | 09-12-2002 05:34 PM |
| Ist Telnet-Client-Bibliothek gibt es? | aho | High-Level-Programmierung | 0 | 09-11-2002 09:45 AM |
| Telnet-Client-IP-Ermittlung | thomas.jones | High-Level-Programmierung | 0 | 08-08-2002 07:17 PM |
| Mit Telnet-Client von Mac OS X die Befehlszeile Terminal | tylerl | UNIX for Dummies Questions & Answers | 2 | 07-15-2001 11:05 AM |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread |
Bewertung:
|
Anzeige-Modi |
|
|
|
||||
|
Wie man einen telnet-Client-Programm?
Hallo, Experten:
Ich habe programmiert eine einfache Telnet-Client in SCO UNIX 5.0.5, hat der Kunde an der ersten Möglichkeit gedacht Verhandlungen, aber ich kann keine Login-Prompt vom Server. Bitte helfen Sie mir. |
|
||||
|
Aktivieren Sie diese http://jos.sweetcherrie.com/src/telnet.c.html
|
|
||||
|
die Source-Datei (die erste Hälfte)
Ich die Quelldateien wie belows, zu denen auch tel_cli.c und tel_cli.h. Kann jemand mir sagen, wie kann ich Login-Prompt und Passwort aus dem Remote-Host?
tel_cli.c: / / Name: tel_cli.c / / Autor: Robert / / Datum: 03. Januar 2002 ---? / / Called: Dieses Modul ist ein Teil von <<Traffic Daten Management>> Anwendung. / / Zweck: Dient zum Login in die Remote-Computer, und führen Sie Befehl auf dem Remote-Rechner. / / Format: tel_cli $ 1 / / Input: $ 1 ist der Hostname des Remote-Rechner, config in der lokalen Datei / etc / hosts. / / Beispiel: tel_cli 134.132.5.11 oder tel_cli lyts1 / / Rückgabe: keine # 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 / / Der Bau gehören Option-ID, Namen und die Option Option Flagge, der Flagge zeigt, / / Wenn der Client-Antwort auf die Option Ja oder Nein, flag \u003d\u003d 1 bedeutet, dass ja. struct OptionFlag ( int id; char * Name; 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; / / Der Socket-Server wartet auf den FTP-Server zu verbinden und zu akzeptieren, ihnen eine data_sock. int data_sock \u003d 0; / / die Buchse für den Empfang oder Senden von Daten-Datei. int ctrl_sock; int para [7]; char * gs_filename; / / Dateinamen brauchen wir char * gs_omc_passwd; int g_iFileLen; / / die Länge der Datei int g_iReceivedLen \u003d 0; / / die Bytes empfangen wurde unsigned char gsSendMsg [LINELEN]; unsigned char gsReceiveMsg [LINELEN]; fd_set all_fds; / / Wesentliche Fortschritte erzielt, abhängig von der Anzahl der Parameter, die Anwendung wird entscheiden, was zu tun ist. int main (int argc, char * argv []) ( char * host \u003d "lyts1"; / / Host zu verwenden, wenn keine geliefert char * service \u003d "telnet"; / / Standard-Service-Name switch (argc) ( Fall 1: printf ( "Usage: getFile [Front-Namen JJMMTT] \ n"); exit (1); Fall 3: / / Service \u003d argv [2]; printf ( "Usage: getFile [Front-Namen JJMMTT] \ 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-Namen JJMMTT] \ 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: 03. Januar 2002 ---? / / Called: Dieses Modul ist nach den wichtigsten Prozess. / / Zweck: zur Erstellung einer Buchse an den angegebenen Host, dann mit dem Gastgeber haben die Wahl, / / Senden Login-Namen und ein Passwort, um den Host, sock_id zurück. / / Input: $ 1 (char * host): Ist der Host-Name des Remote-Rechner. / / $ 2 (char * Service): ist der Service-Typ von der Remote-Rechner, config in der lokalen Datei / etc / services. / / Return: li_sock int create_telnet_cli (const char * host, const char * Service) ( unsigned char rbuf [LINELEN]; / / Puffer für eine Zeile des Textes unsigned char wbuf [LINELEN]; / / Puffer für eine Zeile des Textes unsigned char msg [LINELEN]; unsigned char ch; unsigned char lcOption; int li_sock, li_count; / / li_socket Schlagwort, count int outchars, inchars; / / Zeichen gesendet und empfangen int i; printf ( "Eingabe in telnet_cli \ n"); li_sock \u003d connectTCP (Host-, Service); printf ( "li_socket ist:% 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, Wont, 37); / / write (li_sock, wbuf, strlen (wbuf)); while ((li_count \u003d recv (li_sock, rbuf, LINELEN, 0))> \u003d 0) ( printf ( "Länge:% d,% s \ n", li_count, rbuf); / / Sleep (5); if (li_count \u003d\u003d 0) ( printf ( "Socket wurde geschlossen! \ n"); exit (1); ) / / if li_count> 0, bedeutet dies, dass die Steckdose hat einige Figuren aus dem Server for (i \u003d 0; i <\u003d li_count - 1;) ( printf ( "rbuf [% d] ist:% d \ n", i, rbuf [i]); / / sleep (2); / / ch \u003d rbuf [i]; / / printf ( "% c \ n", ch); if (rbuf [i] \u003d\u003d IAC) ( / / printf ( "rbuf [% d] ist 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 AUTHENTICATION (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 DO NAWS (31) \ n"); / / Sleep (5); bzero (gsSendMsg, LINELEN); ////// SEND IAC SB NAWS 0 132 (132) 0 52 (52) / / der Schlüssel ist, um 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, Wont, 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, Wont, 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, Wont, ECHO_ON); write (li_sock, gsSendMsg, strlen (gsSendMsg)); ) break; Fall DONT: printf ( "ch ist DONT \ n"); break; Fall: 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; |
|
||||
|
der Quelldatei (die zweite Hälfte tel_cli.c und tel_cli.h)
Wont Fall:
break; Fall SB: printf ( "ch ist SB \ n"); sleep (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; 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 ( "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; 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; Standard: printf ( "ch ist ein anderes Zeichen \ n"); break; ) ) sonst ( / / printf ( "ch ist nicht IAC, gibt es vielleicht noch einige Fehler auftreten! \ n"); i + +; ) ) ) ) tel_cli.h: / / telnet Befehlscode # define IAC 255 # define DODO 253 # define DONT 254 # define WIRD 251 # define Wont 252 # define SB 250 # define SE 240 # define ist'0 ' # define SEND'1 ' # define INFO'2 ' # define VAR'0 ' # define VALUE'1 ' # define ESC'2 ' # define USERVAR'3 ' / / Option Namen und ID # define ECHO_ON 1 # define GO_AHEAD 3 # define Status 5 # define TIMER 6 # define 24 # define NAWS 31 # define TSPEED 32 # define FLOW 33 # define LINEMODE 34 # define XDISPLOC 35 / / X-Display-Lage # define OLD_ENVIRON 36 / / Alte - Umgebungsvariablen # define AUTH 37 # define NEW_ENVIRON 39 |
|
||||
|
die Source-Dateien (den dritten Teil)
Ich habe vergessen, einige Funktionen in der Datei tel_cli.c, wenden Sie sich bitte append belowed der Source-Code an das Ende der Datei tel_cli.c.
/ * connectsock - Zuweisung und eine Socket-Verbindung über TCP oder TCP * / int connectsock (const char * host, const char * Service, const char * Transport) / * Argumente: * Host --- Name des Host, mit dem gewünschten Verbindung * Service - Service im Zusammenhang mit dem Hafen * Transport --- Name des Transport-Protokoll zu verwenden ( "tcp" oder "udp") * / ( struct hostent * phe; / * Zeiger auf die Host-Informationen Eintrag * / struct Servent * PSE; / * Zeiger auf die Service-Informationen Eintrag * / struct protoent * PSA; / * Zeiger auf die Einreise-Protokoll-Informationen * / struct sockaddr_in Sünde; / * eine Internet-Endpunkt addredd * / int s, Typ; / * Sockel Schlagwort und Sockel-Typ * / memset (& sin, 0, sizeof (sin)); sin.sin_family \u003d AF_INET; / * Map-Service-Name, um Port-Nummer * / if (PSE \u003d getservbyname (Service-, Transport)) sin.sin_port \u003d PSE-> s_port; else if ((sin.sin_port htons \u003d ((u_short) atoi (Service))) \u003d\u003d 0) ( / / errexit ( "Can't get \"% s \ "Service-Eintrag \ n", service); printf ( "Can't get \"% s \ "Service-Eintrag \ n", service); return 0; ) / * Karte Host-Namen zu IP-Adresse, so dass für 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 ( "Can't get \"% s \ "Protokoll-Eintrag \ n", Transport); printf ( "Can't get \"% s \ "Protokoll-Eintrag \ n", Transport); return 0; ) / * Karte Transport-Protokoll Namen zu Protokoll Zahl * / if ((PSA \u003d getprotobyname (Transport)) \u003d\u003d 0) ( / / errexit ( "Can't get \"% s \ "Protokoll-Eintrag \ n", Transport); printf ( "Can't get \"% s \ "Protokoll-Eintrag \ n", Transport); return 0; ) / * User-Protokoll, um eine Socket-Typ * / if (strcmp (Verkehr, "udp") \u003d\u003d 0) type \u003d SOCK_DGRAM; sonst type \u003d SOCK_STREAM; / * Allocate ein Socket * / s \u003d socket (PF_INET, Typ, PPE-> p_proto); if (n <0) ( / / errexit ( "Cannot create socket:% s \ n", strerror (errno)); printf ( "Cannot create socket:% s \ n", strerror (errno)); return 0; ) / * Schließen Sie das Socket * / if (connect (s, (struct sockaddr *) & sin, sizeof (sin)) <0) ( / / errexit ( "kann keine Verbindung zu% s.% s:% s \ n", Host-, Service-, strerror (errno)); printf ( "kann keine Verbindung zu% s.% s:% s \ n", Host-, Service-, strerror (errno)); return 0; ) return s; ) int connectTCP (const char * host, const char * Service) / * Argumente: * Host --- Name des Host, mit dem gewünschten Verbindung * Service --- Dienstleistung im Zusammenhang mit dem Hafen * / ( Rückkehr connectsock (Host, Service, "tcp"); ) / * Errexit --- Drucken ein Fehler mesage und Ausgang * / / * VARARGS1 * / int errexit (const char * format ,...) ( va_list args; va_start (args, format); vfprintf (stderr, format, args); va_end (args); exit (1); ) |
![]() |
| Lesezeichen |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|