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

📄 monkeys.c

📁 实现ftp协议客户端的源代码
💻 C
字号:
/* monkeys.c * * This spawns multiple simultaneous instances of the FTP Monkey. * I use this to load test an FTP server. */#ifdef HAVE_CONFIG_H#	include <config.h>#endif#include <ncftp.h>				/* Library header. */#include <Strn.h>				/* Library header. */static voidUsage(void){	fprintf(stderr, "FTP Monkey Runner, copyright 1996-2004 by Mike Gleason, NcFTP Software.\n");	fprintf(stderr, "Usage: ftp_monkeys [flags]\n");	(void) fprintf(stderr, "\nGeneral Flags:\n\  -u XX  Use username XX instead of anonymous.\n\  -p XX  Use password XX with the username.\n\  -P XX  Use port number XX instead of the default FTP service port (21).\n\  -a XX  Quit after test has run for XX seconds (default: 7200).\n\  -C     Send CLNT command with unique session identifier.\n\  -D XX  Use remote directory XX as base.\n\  -n XX  Use XX as the number of monkeys to run (default: 5).\n\  -e XX  Intentionally prematurely timeout or close connections XX%% of sessions.\n\  -h XX  Have monkeys connect to the host XX (default: Localhost).\n");	(void) fprintf(stderr, "\nExamples:\n\  ftp_monkeys -n 7 -a 3600 -h 127.0.0.1\n\  ftp_monkeys -n 25 -a 600\n\  ftp_monkeys -n 50\n\n");#ifdef UNAME	fprintf(stderr, "System: %s.\n", UNAME);#endif	exit(2);}	/* Usage */main_void_return_tmain(int argc, char **argv){	int logfd;	char lname[64];	char seedstr[32];	char dstr[32];	char logstr[64];	int c, f, i, n, seed, t, k;	time_t now;	struct tm *ltp;	int es, status;	char *a[32];	const char *aarg, *Darg, *Parg, *uarg, *parg, *earg, *host;	int Carg = 0;	GetoptInfo opt;	n = 5;	aarg = "7200";	Darg = NULL;	Parg = NULL;	uarg = NULL;	parg = NULL;	earg = NULL;	host = "Localhost";	GetoptReset(&opt);	while ((c = Getopt(&opt, argc, argv, "a:CD:P:u:p:n:h:e:")) > 0) switch(c) {		case 'a':			aarg = opt.arg;			break;		case 'e':			earg = opt.arg;			break;		case 'C':			Carg = 1;			break;		case 'D':			Darg = opt.arg;			break;		case 'P':			Parg = opt.arg;			break;		case 'u':			uarg = opt.arg;			break;		case 'p':			parg = opt.arg;			break;		case 'n':			n = atoi(opt.arg);			break;		case 'h':			host = opt.arg;			break;		default:			Usage();	}	time(&now);	ltp = localtime(&now);	strftime(dstr, sizeof(dstr), "%m/%d %H:%M:%S", ltp);	a[0] = strdup("ftp_monkey");	a[1] = strdup("-s");	a[2] = strdup("0");	a[3] = strdup("-R");	a[4] = strdup("-a");	a[5] = strdup(aarg);	k = 6;	if (Carg != 0) {		a[k] = strdup("-C");		k++;	}	if (earg != NULL) {		a[k] = strdup("-e");		k++;		a[k] = strdup(earg);		k++;	}	if (uarg != NULL) {		a[k] = strdup("-u");		k++;		a[k] = strdup(uarg);		k++;	}	if (parg != NULL) {		a[k] = strdup("-p");		k++;		a[k] = strdup(parg);		k++;	}	if (Parg != NULL) {		a[k] = strdup("-P");		k++;		a[k] = strdup(Parg);		k++;	}	if (Darg != NULL) {		a[k] = strdup("-D");		k++;		a[k] = strdup(Darg);		k++;	}	a[k] = strdup(host);	a[++k] = NULL;	for (seed=1; seed<=n; seed++) {		i = seed;		sprintf(lname, "out.%02d", i);		logfd = open(lname, O_WRONLY|O_APPEND|O_TRUNC|O_CREAT, 00666);		if (logfd < 0) {			perror(lname);			exit(1);		}		sprintf(seedstr, "%d", seed);		sprintf(logstr, "%s  seed=%d\n", dstr, seed);		write(logfd, logstr, strlen(logstr));		a[2] = seedstr;		if ((f = fork()) < 0) {			perror("fork");			exit(1);		} else if (f == 0) {			/* child */			close(1);			close(2);			dup2(logfd, 1);			dup2(logfd, 2);			close(logfd);			execvp(a[0], a);			perror(a[0]);			exit(1);		} else {			close(logfd);			printf("%s  ", dstr);			for (t=0; a[t] != NULL; t++)				printf("%s ", a[t]);			printf("> %s  (pid: %u)\n", lname, f);			sleep(1);		}	}	for ( ; ; ) {		if ((f = wait(&status)) > 0) {			if (WIFEXITED(status) == 0)				continue;			es = WEXITSTATUS(status);			time(&now);			ltp = localtime(&now);			strftime(dstr, sizeof(dstr), "%m/%d %H:%M:%S", ltp);			fprintf(stdout, "%s  pid=%d exited=%d.\n", dstr, f, es);		} else if ((f < 0) && (errno != EINTR)) {			break;		/* all monkeys done */		}	}	exit(0);}	/* main */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -