Telnet client in C

E

Enos Meroka

Hallo,
Am trying to establish a telnet session with my C program. However, I
seem not to able to get the prompt, after supplying the username and
passowrd. could someone assist me in troubleshoot my code and inform me
where i might be getting it wrong.

I would appreciate if I got ideas of how to achieve this in a simpler
way. Below is my code
===================================================================

#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

int printFromSocket(int sd);

void error(char *msg)
{
perror(msg);
exit(0);
}

int main(int argc, char *argv[])
{
int sockfd, portno, n, rs;
struct sockaddr_in serv_addr;
struct hostent *server;

char buffer[2056];
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}
portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
server = gethostbyname(argv[1]);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
//printf("Please enter the message: ");
bzero(buffer,2056);

strcpy(buffer,"");
//fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,2056);

// Sending first sequence of string characters
bzero(buffer,2056);
sprintf (buffer, "%c%c%c",255,252,36);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket2");
bzero(buffer,2056);
// Sending second sequence of string characters
bzero(buffer,2056);
sprintf (buffer, "%c%c%c",255,252,24);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);

sprintf (buffer, "%c%c%c%c%c%c",255,252,24,255,252,32);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,2056);

sprintf (buffer,
"%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",255,252,32,255,253,1,255,253,3,255,252,31,255,252,33,255,251,1);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,2056);

sprintf (buffer,
"%c%c%c%c%c%c%c%c%c%c%c%c",255,252,31,255,252,33,255,253,1,255,252,1);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,2056);

sleep(1);
n = read(sockfd,buffer,2055);
if (n < 0)
error("ERROR reading from socket");
printf("%s\t",buffer);



//---------------------------------------------------------------------------------------
bzero(buffer,2056);
//sending the username
sprintf (buffer, "meroka%\n");
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
sleep(1);
bzero(buffer,2056);
n = read(sockfd,buffer,2055);
if (n < 0)
error("ERROR reading from socket7");
printf("%s",buffer);

//---------------------------------------------------------------------------------------

bzero(buffer,2056);
//sending the password
sprintf (buffer, "meroka123\n");
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
sleep(1);
bzero(buffer,2056);
n = read(sockfd,buffer,2055);
if (n < 0)
error("ERROR reading from socket7");
if ((rs = printFromSocket(sockfd))!= -1)
printf("\n Am Here!!");

//---------------------------------------------------------------------------------------

//---------------------------------------------------------------------------------------

bzero(buffer,2056);
strcpy(buffer,"");
//fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
printf("%s",buffer);

bzero(buffer,2056);
// Sending first sequence of string characters
bzero(buffer,2056);
sprintf (buffer, "%c%c%c",255,252,36);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket2");
bzero(buffer,2056);
printf("%s",buffer);

//---------------------------------------------------------------------------------------
return 0;
}

int printFromSocket(int sd)
{
int len = 0;
int result;
char buf[2056];
do
{
len = read(sd, buf, 2055);
printf("\n%s",buf);
}while(len > 0);
result =input_timeout (sd, 5);
if (result == 0)
{
printf("\n No output");
return 0;
}
else
return -1;

}

int input_timeout (int filedes, unsigned int seconds)
{
fd_set set, wrset;
struct timeval timeout;

/* Initialize the file descriptor set. */
FD_ZERO (&set);
FD_ZERO (&wrset);
FD_SET (filedes, &set);
FD_SET (1, &wrset);

/* Initialize the timeout data structure. */
timeout.tv_sec = seconds;
timeout.tv_usec = 0;

/* select returns 0 if timeout, 1 if input available, -1 if error. */
return (select (FD_SETSIZE,&set, NULL, NULL,&timeout));
}
===================================================================
 
G

Grumble

Enos said:
Hallo,
Am trying to establish a telnet session with my C program. However, I
seem not to able to get the prompt, after supplying the username and
passowrd. could someone assist me in troubleshoot my code and inform me
where i might be getting it wrong.

Wrong newsgroup. Try comp.unix.programmer

I see you've already posted to comp.unix.programmer

Newsgroups: comp.unix.programmer
Subject: Telnet client in C
Date: 20 May 2005 02:19:04 -0700

Multi-posting (copying the same message to different groups) is
frowned upon.
 
E

Enos Meroka

Thanks for your reply,
I realized that I had posted my message in the wrong newsgroup. That's
when i posted it on the other newsgroup.
Apologies are in order. Am sorry for the inconvenience caused.
 
K

Kenny McCormack

Enos Meroka wrote some off-topic clutter:
....
To which you responded:
Wrong newsgroup. Try comp.unix.programmer

I see you've already posted to comp.unix.programmer

Newsgroups: comp.unix.programmer
Subject: Telnet client in C
Date: 20 May 2005 02:19:04 -0700

Multi-posting (copying the same message to different groups) is
frowned upon.

Right. But then again, if you are going to post to an inappropriate
newsgroup, it is better to multi-post there, than to cross-post, since then
the followups (generated from the appropriate newsgroups) don't also end up
there. I.e., most users (of all email and news oriented type software)
are too stupid to trim followups - they just go ahead and "reply all".
 
C

CBFalconer

Enos said:
Am trying to establish a telnet session with my C program. However,
I seem not to able to get the prompt, after supplying the username
and passowrd. could someone assist me in troubleshoot my code and
inform me where i might be getting it wrong.

I would appreciate if I got ideas of how to achieve this in a
simpler way. Below is my code
================================================================

#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

None of these (save stdio.h) are valid in a conforming C program.
Thus this is off topic in c.l.c, where we deal with standard
portable C only. Find a group that deals with your system.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,189
Members
46,735
Latest member
HikmatRamazanov

Latest Threads

Top