FTP-connect
-
hi,
ich soll mal im auftrag einer person hier folgenden code abbilden und ein paar fragen stellen.
#include <sys/socket.h> #include <netinet/in.h> #include <stdlib.h> #include <unistd.h> #define ERROR -1 #define CLOSED 2 #define OPEN 1 char back[100]; int checkFtp(char *ip) { int test=0; int ftpsock; struct sockaddr_in servaddr; char *myftp; myftp= "USER XXXXXX\r\n && PASS XXXXXX\r\n"; ftpsock = socket(AF_INET, SOCK_STREAM, 0); if(ftpsock < 0) { printf("error.cannot create socket\n"); return ERROR; } servaddr.sin_family = AF_INET; servaddr.sin_port = htons(21); servaddr.sin_addr.s_addr = inet_addr(ip); test = connect(ftpsock, (struct sockaddr_in*)&servaddr, sizeof(servaddr)); if(test == -1) { close(ftpsock); return CLOSED; } write(ftpsock, myftp, sizeof(myftp)); read(ftpsock, back, sizeof(back)-1); close(ftpsock); return OPEN; } int main (int argc, char **argv) { int i; char *dest; if(argc != 2) { printf("usage: %s [dest-ip]\n", argv[0]); return ERROR; } dest = argv[1]; printf("\n\t>>>>>FTP-Searcher programmed by M4r1cO5<<<<<\n"); if(checkFtp(dest) == OPEN) { printf("%s",back); } return 0; }
so er möchte mit seinem programm testen ob ein ftp via anymous connecten kann. nun weiss er aber nicht was an dem bisherigen code falsch ist.
meine vermutung ist das er zwar eine verbindung zum server herstellen kann aber sich nicht darauf einloggt.
habt ihr ne idee wie man das mit dem bisherigen code reallisieren kann?cu
-
Soll das unter Linux laufen?
hier gibts Tuts zur Socket-Programmierung: http://forum.c-plusplus.net/viewtopic.php?t=80679danach über das FTP-Protokoll informieren, mit google findet er das passende RFC
-
ich denke mal nicht.
-
hi,
es soll doch unter unix laufen. aber was fehlt od. wo ist der fehler?
bitte helft ihm.cu
-
Dieser Thread wurde von Moderator/in Gerard aus dem Forum C++ in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo,
FTP-Searcher programmed by M4r1cO5<<<<<
Goil
Bei deinem Code wird überhaupt kein Socket erstellt und überhaupt nix verschickt. Das kannst du einfach überprüfen, indem du tcpdump benutzt. Vergleich deinen Code mal mit dem folgenden (ist von hier):
/* ** client.c -- a stream socket client demo */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #define PORT 21 // the port client will be connecting to #define MAXDATASIZE 100 // max number of bytes we can get at once int main(int argc, char *argv[]) { int sockfd, numbytes; char buf[MAXDATASIZE]; struct hostent *he; struct sockaddr_in their_addr; // connector's address information if (argc != 2) { fprintf(stderr,"usage: client hostname\n"); exit(1); } if ((he=gethostbyname(argv[1])) == NULL) { // get the host info perror("gethostbyname"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } their_addr.sin_family = AF_INET; // host byte order their_addr.sin_port = htons(PORT); // short, network byte order their_addr.sin_addr = *((struct in_addr *)he->h_addr); memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the struct if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) { perror("connect"); exit(1); } if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) { perror("recv"); exit(1); } buf[numbytes] = '\0'; printf("Received: %s",buf); close(sockfd); return 0; }