2

I am new to socket programing. I want to login to my ftp server. I can establish connection successfully but I can't send other commands for user and password.

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <arpa/inet.h>

int main(int argc, char *argv[])
{
    argv[0]="2";
    argv[1]="00.00.00.0000"; //my ip

    int sockfd = 0, n = 0;
    char recvBuff[1024];
    struct sockaddr_in serv_addr;
    char message[100]="USER [email protected]";

    argc=2;

    if(argc != 2)
    {
        printf("\n Usage: %s <ip of server> \n",argv[0]);
        return 1;
    }

    memset(recvBuff, '0',sizeof(recvBuff));
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        printf("\n Error : Could not create socket \n");
        return 1;
    }

    memset(&serv_addr, '0', sizeof(serv_addr));

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(21);


    serv_addr.sin_addr.s_addr = inet_addr(argv[1]);

    if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
    {
        printf("\n Error : Connect Failed \n");
        return 1;
    }

    if( send(sockfd , message , strlen(message) , 0) < 0)
    {
        perror("send failed");
        return 1;
    }


    while ( (n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0)
    {
        recvBuff[n] = 0;
        if(fputs(recvBuff, stdout) == EOF)
        {
            printf("\n Error : Fputs error\n");
            return 0;
        }
    }

    if(n < 0)
    {
        printf("\n Read error \n");
        return 0;
    } 

    return 0;
}

I am getting this:

220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 22:05. Server port: 21.
220 You will be disconnected after 15 minutes of inactivity.

Why I can't send commands to server after connection established?

3
  • Why do you think you can't? Are you receiving any errors? Commented Mar 31, 2015 at 20:14
  • I should get "331 User [email protected] OK. Password required" message? Commented Mar 31, 2015 at 20:17
  • 1
    The best thing you can do to debug your sockets application is to set up a simple local server with netcat and see all of the messages being received and sent (it's a general advice). Commented Mar 31, 2015 at 20:18

1 Answer 1

3

You need to terminate each FTP command with a CRLF. This is missing from your USER command. The remote server won't process the command until it receives the newline.

Source: RFC 959

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.