⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myftp.h

📁 linux ftp c port linux ftp c port linux ftp c port linux ftp c port
💻 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 + -