1,194
社区成员
发帖
与我相关
我的任务
分享
/*
** Description: ftp工具
** Input_parms: ip 目标系统IP地址
** user 目标系统用户名
** pass 目标系统密码
** dpath 目标系统存取文件的路径
** spath 本地系统存取文件的路径
** file 存取文件的名称
** mode 传输模式 mput-上传 mget-下载
** Return_value: 操作是否失败 0-否 1-是
*/
int autoFTP(ip,user,pass,dpath,spath,file,mode)
char *ip;
char *user;
char *pass;
char *dpath;
char *spath;
char *file;
char *mode;
{
FILE *fp;
int rc=0; /*管道关闭返回码*/
char acBuf[1024];
memset( acBuf, 0x00, sizeof( acBuf ) );
FILE *fp1;/*读取标准输出信息文件指针*/
/*进入本地存取文件路径*/
chdir(spath);
/*打开FTP传输管道*/
if((fp=popen("ftp -n","w"))==NULL)
{
strcpy(g_acRspMsg,"打开FTP传输管道失败!");
ERRLOG /*打印错误日志的宏 g_acRspMsg是已定义的全局变量*/
return 1;
}
if (fp1=freopen("ftp.log", "r", stdout) == NULL)
fprintf(stderr, "error redirecting\ stdout\n");
fprintf(fp,"open %s\n",ip);
fprintf(fp,"user %s %s\n",user,pass);
fprintf(fp,"prompt\n");
fprintf(fp,"cd %s\n",dpath);
fprintf(fp,"%s %s\n",mode,file); /*文件传输*/
fprintf(fp,"bye\n");
fread(acBuf, strlen(acBuf)+1, 1, fp1);
printf("%s\n", acBuf); /*读取到的都是上面fprintf输入的内容,没有输入命令后目标系统的响应信息*/
fclose(fp1);
/*关闭管道取得shell命令执行返回码 -1:管道关闭失败 大于0:命令执行失败*/
rc=pclose(fp);
sprintf( g_acTrcMsg, "FTP返回码rc[%d]",rc);
TRCLOG4/*打印跟踪日志的宏*/
if(rc==-1)
{
strcpy(g_acRspMsg,"关闭FTP传输管道失败");
ERRLOG
return 1;
}
else if(rc>0)
{
sprintf(g_acRspMsg,"执行FTP命令出错,错误码[%d]",rc);
ERRLOG
return 1;
}
return 0;
}