Exemple #1
0
/* download files/folders */
void ftp_download(ftp_t *ftp, char *path) {
	char *line = NULL;
	char buffer[MAX_STR];
	FILE *data;
	int co = 0;

	ftp->alarm_sec = 3;
	fprintf(ftp->FD, "SIZE %s\r\n", path);
	line = ftp_getline(ftp);
	ftp->code = atoi(line);

	if ( ftp->code == 213 ) {
		ftp_mkcon(ftp);
		ftp_download_single(ftp, path, 1);
	}
	else {
		/* TODO: add download time */
		print(3, ">>> %sStart downloading from%s %s\'%s\'%s ...\n",YEL,END,GREEN,path,END); 
		ftp->dataport = ftp_getdataport(ftp);
		fprintf(ftp->FD, "NLST %s\r\n", path);
		data = tcp_connect(ip, ftp->dataport, "r");
		ftp_getline(ftp);

		while ( fgets(buffer, sizeof(buffer), data)) {
			buffer[strlen(buffer)-2] = '\0';
			ftp_mkcon(ftp);
			ftp_download_single(ftp, buffer, 0);
			co++;
		}
		fclose(data);
		close(dfd);
		print(0, ">>> %sFinished! we have %s%s%d files (:%s", GREEN,END,
			YEL,co,END, path);
	}
}
Exemple #2
0
char * skod_hc_fingerprint(ftp_t *ftp) {
	char *line = NULL;
	const char **ptr = NULL;
	unsigned long sum = 0;
	char ssum[MAX_STR];
	static char patr[MAX_STR];
	int size = sizeof(ftp_commands) / sizeof(ftp_commands[0]);
	int c = 1;

	bzero(patr, MAX_STR);
	bzero(ssum, MAX_STR);
		
	ftp_close(ftp);
	/* It's more safe to make connection to each request
	 * This way we will get the fingerprint 100% */
	for ( ptr = ftp_commands; *ptr; ptr++ ) {
		ftp_mkcon(ftp);
		fprintf(ftp->FD, "%s\r\n", *ptr);
		line = ftp_getline(ftp);
		sum = skod_checksum(line);
		sprintf(ssum, "%lu", sum);
		strcat(patr, ssum);
		if ( c == size )
				break;
		strcat(patr,":");
		c++;
		ftp_close(ftp);
	}
	return (char *)patr;
}
Exemple #3
0
/* Parse OS/STAT*/
void skod_parse_stat(skod_t *skod, ftp_t *ftp) {
	char *line = NULL;
	char buffer[MAX_STR];
	const char **p = NULL;

	if ( ftp->logged ) {
		fprintf(ftp->FD, "STAT\r\n");
		while (( fgets(buffer, sizeof(buffer), ftp->FD)) != NULL ) {
			for ( p = ftp_prod; *p;p++ ) {
				if ( strstr(buffer, *p))
					print(3, "%s", buffer);
			}
		}
				print(0, " ");
	}
	ftp_close(ftp);
	ftp_mkcon(ftp);

	/* Parse OS */
	fprintf(ftp->FD, "SYST\r\n");
	line = ftp_getline(ftp);
	if (( strstr(line, "UNIX")))
		skod->os = SKOD_OS_NIX;
	if (( strstr(line, "NT")))
		skod->os = SKOD_OS_NT;
}
Exemple #4
0
int main(int argc, char **argv) {
	skod_t skod;
	ftp_t ftp;

	skod_init(&skod);
	skod_parse_cla(argc, argv, &skod);		

	signal(SIGINT, signal_handler);

	/* Init FTP*/
	ftp.user = skod.user;
	ftp.password = skod.password;
	ftp.server = skod.server;
	ftp.port = skod.port;
	ftp.alarm_sec = 1; /* High risk */

	ftp_mkcon(&ftp);

	/* --dest, -e*/
	if ( skod.dest != NULL )
		ftp_cwd(&ftp, skod.dest);
	else if ( skod.dest == NULL && flag == 4 )
		die("You need to pass --dest (destination folder) with --upload.");

	switch(flag) {
		case 1:
			ftp_list(&ftp, skod.path, 1);
			break;
		case 2:
			ftp_remove(&ftp, skod.path);
			break;
		case 3:
			ftp_download_single(&ftp, skod.path);
			break;
		case 4:
			ftp_upload_single(&ftp, skod.path);
			break;
		case 5:
			ftp_cat(&ftp, skod.path);
			break;
		case 6:
			printf("%d\n", ftp_size(&ftp, skod.path));
			break;
		case 7:
			printf("%s\n", ftp_pwd(&ftp));
			break;
		case 8:
			ftp_delete(&ftp, skod.path);
			break;
		case 10:
			ftp_mdtm(&ftp, skod.path);
			break;
		case 99:
			skod_scan(&skod, &ftp);
			break;
	}

	ftp_close(&ftp);
	return 0;
}