📄 myftp.h
字号:
int verbose = 1;FILE *ftpio = NULL;char buf[4096];int ftpcmd(int sockftp,char *fmt,...){ va_list vp; int err,len; if (ftpio == NULL) { ftpio = fdopen(sockftp, "r"); if (ftpio == NULL) return -1; } if (fmt) { va_start(vp,fmt); len = vsprintf(buf,fmt,vp); buf[len++] = '\r'; buf[len++] = '\n'; write(sockftp,buf,len); if (verbose) { write(1,buf,len); } } do { if (fgets(buf,sizeof(buf),ftpio) == NULL) { return -1; } if (verbose) { printf (buf); } } while(buf[3] == '-'); sscanf(buf, "%d",&err); return err;}int ftp(char *host,int port,char *user,char *pass,char *filename,char *savefile,char *path){ int sockftp = -1,sockdata = -1,sockxfer = -1; struct sockaddr_in addr; unsigned long hostip; int len,tmp,err; int retval = -1; int savefd; unsigned char *c,*p; struct hostent *he; hostip = inet_addr(host); if (hostip == -1) { he = gethostbyname(host); if (he == NULL) { return -1; } hostip = * (unsigned long *)he->h_addr; } sockftp = socket(AF_INET,SOCK_STREAM,0); if (sockftp == -1) { goto out; } addr.sin_family = PF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = hostip; if (connect(sockftp,(struct sockaddr *)&addr,sizeof(addr)) == -1) { goto out; } err = ftpcmd(sockftp,NULL); if (err != 220) { goto out; } err = ftpcmd(sockftp, "USER %s ",user); if (err != 331) { goto out; } err = ftpcmd(sockftp, "PASS %s ",pass); if (err != 230) { goto out; } err = ftpcmd(sockftp, "TYPE I "); if (err != 200) { goto out; } sockdata = socket(AF_INET,SOCK_STREAM,0); if (sockdata == -1) { goto out; } tmp = sizeof(addr); getsockname(sockftp,(struct sockaddr *)&addr,&tmp); addr.sin_port = 0; if (bind(sockdata,(struct sockaddr *)&addr,sizeof(addr)) == -1) { goto out; } if (listen(sockdata,1) == -1) { goto out; } tmp = sizeof(addr); getsockname(sockdata,(struct sockaddr *)&addr,&tmp); c = (unsigned char *)&addr.sin_addr; p = (unsigned char *)&addr.sin_port; err = ftpcmd(sockftp, "PORT %d,%d,%d,%d,%d,%d ", c[0],c[1],c[2],c[3],p[0],p[1]); if (err != 200) { goto out; } err = ftpcmd(sockftp, "CWD %s",path); if (err != 250) { goto out; } err = ftpcmd(sockftp, "LIST"); if (err != 150) { goto out; } printf("\n\n成功收录主机:%s,路径:%s\n\n",host,path); tmp = sizeof(addr); sockxfer = accept(sockdata,(struct sockaddr *)&addr,&tmp); if (sockxfer == -1) { goto out; } remove(savefile); savefd = open(savefile,O_WRONLY|O_CREAT,0644); if (savefd == -1) { goto out; } retval = 0; while ((len=read(sockxfer,buf,sizeof(buf)))> 0) { write (savefd,buf,len); retval += len; }; close (savefd);out: close (sockxfer); close (sockdata); close (sockftp); if (ftpio) { fclose(ftpio); ftpio = NULL; } return retval;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -