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

📄 cmds.c

📁 Linux下的socks的程序源程序,用于socks的代理服务
💻 C
📖 第 1 页 / 共 3 页
字号:
 */mget(argc, argv)	int argc;	char **argv;{	extern jmp_buf jabort;	sig_t oldintr;	int ointer;	char *cp, *tp, *tp2, tmpbuf[MAXPATHLEN];	void mabort();	if (argc < 2 && !another(&argc, &argv, "remote-files")) {		printf("usage: %s remote-files\n", argv[0]);		code = -1;		return;	}	mname = argv[0];	mflag = 1;	oldintr = signal(SIGINT,mabort);	(void) setjmp(jabort);	while ((cp = remglob(argv,proxy)) != NULL) {		if (*cp == '\0') {			mflag = 0;			continue;		}		if (mflag && confirm(argv[0], cp)) {			tp = cp;			if (mcase) {				while (*tp && !islower(*tp)) {					tp++;				}				if (!*tp) {					tp = cp;					tp2 = tmpbuf;					while ((*tp2 = *tp) != NULL) {						if (isupper(*tp2)) {							*tp2 = 'a' + *tp2 - 'A';						}						tp++;						tp2++;					}				}				tp = tmpbuf;			}			if (ntflag) {				tp = dotrans(tp);			}			if (mapflag) {				tp = domap(tp);			}			recvrequest("RETR", tp, cp, "w",			    tp != cp || !interactive);			if (!mflag && fromatty) {				ointer = interactive;				interactive = 1;				if (confirm("Continue with","mget")) {					mflag++;				}				interactive = ointer;			}		}	}	(void) signal(SIGINT,oldintr);	mflag = 0;}char *remglob(argv,doswitch)	char *argv[];	int doswitch;{	char temp[16];	static char buf[MAXPATHLEN];	static FILE *ftemp = NULL;	static char **args;	int oldverbose, oldhash;	char *cp, *mode;	if (!mflag) {		if (!doglob) {			args = NULL;		}		else {			if (ftemp) {				(void) fclose(ftemp);				ftemp = NULL;			}		}		return(NULL);	}	if (!doglob) {		if (args == NULL)			args = argv;		if ((cp = *++args) == NULL)			args = NULL;		return (cp);	}	if (ftemp == NULL) {		(void) strcpy(temp, _PATH_TMP);		(void) mktemp(temp);		oldverbose = verbose, verbose = 0;		oldhash = hash, hash = 0;		if (doswitch) {			pswitch(!proxy);		}		for (mode = "w"; *++argv != NULL; mode = "a")			recvrequest ("NLST", temp, *argv, mode, 0);		if (doswitch) {			pswitch(!proxy);		}		verbose = oldverbose; hash = oldhash;		ftemp = fopen(temp, "r");		(void) unlink(temp);		if (ftemp == NULL) {			printf("can't find list of remote files, oops\n");			return (NULL);		}	}	if (fgets(buf, sizeof (buf), ftemp) == NULL) {		(void) fclose(ftemp), ftemp = NULL;		return (NULL);	}	if ((cp = index(buf, '\n')) != NULL)		*cp = '\0';	return (buf);}char *onoff(bool)	int bool;{	return (bool ? "on" : "off");}/* * Show status. *//*ARGSUSED*/status(argc, argv)	int argc;	char *argv[];{	int i;	if (connected)		printf("Connected to %s.\n", hostname);	else		printf("Not connected.\n");	if (!proxy) {		pswitch(1);		if (connected) {			printf("Connected for proxy commands to %s.\n", hostname);		}		else {			printf("No proxy connection.\n");		}		pswitch(0);	}	printf("Mode: %s; Type: %s; Form: %s; Structure: %s\n",		modename, typename, formname, structname);	printf("Verbose: %s; Bell: %s; Prompting: %s; Globbing: %s\n", 		onoff(verbose), onoff(bell), onoff(interactive),		onoff(doglob));	printf("Store unique: %s; Receive unique: %s\n", onoff(sunique),		onoff(runique));	printf("Case: %s; CR stripping: %s\n",onoff(mcase),onoff(crflag));	if (ntflag) {		printf("Ntrans: (in) %s (out) %s\n", ntin,ntout);	}	else {		printf("Ntrans: off\n");	}	if (mapflag) {		printf("Nmap: (in) %s (out) %s\n", mapin, mapout);	}	else {		printf("Nmap: off\n");	}	printf("Hash mark printing: %s; Use of PORT cmds: %s\n",		onoff(hash), onoff(sendport));	if (macnum > 0) {		printf("Macros:\n");		for (i=0; i<macnum; i++) {			printf("\t%s\n",macros[i].mac_name);		}	}	code = 0;}/* * Set beep on cmd completed mode. *//*VARARGS*/setbell(){	bell = !bell;	printf("Bell mode %s.\n", onoff(bell));	code = bell;}/* * Turn on packet tracing. *//*VARARGS*/settrace(){	trace = !trace;	printf("Packet tracing %s.\n", onoff(trace));	code = trace;}/* * Toggle hash mark printing during transfers. *//*VARARGS*/sethash(){	hash = !hash;	printf("Hash mark printing %s", onoff(hash));	code = hash;	if (hash)		printf(" (%d bytes/hash mark)", 1024);	printf(".\n");}/* * Turn on printing of server echo's. *//*VARARGS*/setverbose(){	verbose = !verbose;	printf("Verbose mode %s.\n", onoff(verbose));	code = verbose;}/* * Toggle PORT cmd use before each data connection. *//*VARARGS*/setport(){	sendport = !sendport;	printf("Use of PORT cmds %s.\n", onoff(sendport));	code = sendport;}/* * Turn on interactive prompting * during mget, mput, and mdelete. *//*VARARGS*/setprompt(){	interactive = !interactive;	printf("Interactive mode %s.\n", onoff(interactive));	code = interactive;}/* * Toggle metacharacter interpretation * on local file names. *//*VARARGS*/setglob(){		doglob = !doglob;	printf("Globbing %s.\n", onoff(doglob));	code = doglob;}/* * Set debugging mode on/off and/or * set level of debugging. *//*VARARGS*/setdebug(argc, argv)	int argc;	char *argv[];{	int val;	if (argc > 1) {		val = atoi(argv[1]);		if (val < 0) {			printf("%s: bad debugging value.\n", argv[1]);			code = -1;			return;		}	} else		val = !debug;	debug = val;	if (debug)		options |= SO_DEBUG;	else		options &= ~SO_DEBUG;	printf("Debugging %s (debug=%d).\n", onoff(debug), debug);	code = debug > 0;}/* * Set current working directory * on remote machine. */cd(argc, argv)	int argc;	char *argv[];{	if (argc < 2 && !another(&argc, &argv, "remote-directory")) {		printf("usage: %s remote-directory\n", argv[0]);		code = -1;		return;	}	if (command("CWD %s", argv[1]) == ERROR && code == 500) {		if (verbose)			printf("CWD command not recognized, trying XCWD\n");		(void) command("XCWD %s", argv[1]);	}}/* * Set current working directory * on local machine. */lcd(argc, argv)	int argc;	char *argv[];{	char buf[MAXPATHLEN];#ifndef GETCWD	extern char *getwd();#endif	if (argc < 2)		argc++, argv[1] = home;	if (argc != 2) {		printf("usage: %s local-directory\n", argv[0]);		code = -1;		return;	}	if (!globulize(&argv[1])) {		code = -1;		return;	}	if (chdir(argv[1]) < 0) {		fprintf(stderr, "local: %s: %s\n", argv[1], strerror(errno));		code = -1;		return;	}#ifdef GETCWD	printf("Local directory now %s\n", getcwd(buf, MAXPATHLEN-1));#else	printf("Local directory now %s\n", getwd(buf));#endif	code = 0;}/* * Delete a single file. */delete(argc, argv)	int argc;	char *argv[];{	if (argc < 2 && !another(&argc, &argv, "remote-file")) {		printf("usage: %s remote-file\n", argv[0]);		code = -1;		return;	}	(void) command("DELE %s", argv[1]);}/* * Delete multiple files. */mdelete(argc, argv)	int argc;	char **argv;{	extern jmp_buf jabort;	sig_t oldintr;	int ointer;	char *cp;	void mabort();	if (argc < 2 && !another(&argc, &argv, "remote-files")) {		printf("usage: %s remote-files\n", argv[0]);		code = -1;		return;	}	mname = argv[0];	mflag = 1;	oldintr = signal(SIGINT, mabort);	(void) setjmp(jabort);	while ((cp = remglob(argv,0)) != NULL) {		if (*cp == '\0') {			mflag = 0;			continue;		}		if (mflag && confirm(argv[0], cp)) {			(void) command("DELE %s", cp);			if (!mflag && fromatty) {				ointer = interactive;				interactive = 1;				if (confirm("Continue with", "mdelete")) {					mflag++;				}				interactive = ointer;			}		}	}	(void) signal(SIGINT, oldintr);	mflag = 0;}/* * Rename a remote file. */renamefile(argc, argv)	int argc;	char *argv[];{	if (argc < 2 && !another(&argc, &argv, "from-name"))		goto usage;	if (argc < 3 && !another(&argc, &argv, "to-name")) {usage:		printf("%s from-name to-name\n", argv[0]);		code = -1;		return;	}	if (command("RNFR %s", argv[1]) == CONTINUE)		(void) command("RNTO %s", argv[2]);}/* * Get a directory listing * of remote files. */ls(argc, argv)	int argc;	char *argv[];{	char *cmd;	if (argc < 2)		argc++, argv[1] = NULL;	if (argc < 3)		argc++, argv[2] = "-";	if (argc > 3) {		printf("usage: %s remote-directory local-file\n", argv[0]);		code = -1;		return;	}	cmd = argv[0][0] == 'n' ? "NLST" : "LIST";	if (strcmp(argv[2], "-") && !globulize(&argv[2])) {		code = -1;		return;	}	if (strcmp(argv[2], "-") && *argv[2] != '|')		if (!globulize(&argv[2]) || !confirm("output to local-file:", argv[2])) {			code = -1;			return;	}	recvrequest(cmd, argv[2], argv[1], "w", 0);}/* * Get a directory listing * of multiple remote files. */mls(argc, argv)	int argc;	char **argv;{	extern jmp_buf jabort;	sig_t oldintr;	int ointer, i;	char *cmd, mode[1], *dest;	void mabort();	if (argc < 2 && !another(&argc, &argv, "remote-files"))		goto usage;	if (argc < 3 && !another(&argc, &argv, "local-file")) {usage:		printf("usage: %s remote-files local-file\n", argv[0]);		code = -1;		return;	}	dest = argv[argc - 1];	argv[argc - 1] = NULL;	if (strcmp(dest, "-") && *dest != '|')		if (!globulize(&dest) ||		    !confirm("output to local-file:", dest)) {			code = -1;			return;	}	cmd = argv[0][1] == 'l' ? "NLST" : "LIST";	mname = argv[0];	mflag = 1;	oldintr = signal(SIGINT, mabort);	(void) setjmp(jabort);	for (i = 1; mflag && i < argc-1; ++i) {		*mode = (i == 1) ? 'w' : 'a';		recvrequest(cmd, dest, argv[i], mode, 0);		if (!mflag && fromatty) {			ointer = interactive;			interactive = 1;			if (confirm("Continue with", argv[0])) {				mflag ++;			}			interactive = ointer;		}	}	(void) signal(SIGINT, oldintr);	mflag = 0;}/* * Do a shell escape *//*ARGSUSED*/shell(argc, argv)	int argc;	char **argv;{	int pid;	sig_t old1, old2;	char shellnam[40], *shell, *namep; #if defined(SOLARIS) || defined(__alpha) || defined(SCO) || defined(ISC)        int     status;#else        union wait status;#endif	old1 = signal (SIGINT, SIG_IGN);	old2 = signal (SIGQUIT, SIG_IGN);	if ((pid = fork()) == 0) {		for (pid = 3; pid < 20; pid++)			(void) close(pid);		(void) signal(SIGINT, SIG_DFL);		(void) signal(SIGQUIT, SIG_DFL);		shell = getenv("SHELL");		if (shell == NULL)			shell = _PATH_BSHELL;		namep = rindex(shell,'/');		if (namep == NULL)			namep = shell;		(void) strcpy(shellnam,"-");		(void) strcat(shellnam, ++namep);		if (strcmp(namep, "sh") != 0)			shellnam[0] = '+';		if (debug) {			printf ("%s\n", shell);			(void) fflush (stdout);		}		if (argc > 1) {			execl(shell,shellnam,"-c",altarg,(char *)0);		}		else {			execl(shell,shellnam,(char *)0);		}		perror(shell);		code = -1;		exit(1);		}	if (pid > 0)#if defined(SOLARIS) || defined(__alpha)                while (wait(&status) != pid) ;#else                while (wait((int *)&status) != pid) ;#endif	(void) signal(SIGINT, old1);	(void) signal(SIGQUIT, old2);	if (pid == -1) {		perror("Try again later");		code = -1;	}	else {		code = 0;	}	return (0);}/* * Send new user information (re-login) */user(argc, argv)	int argc;	char **argv;{	char acct[80], *getpass();	int n, aflag = 0;	if (argc < 2)		(void) another(&argc, &argv, "username");	if (argc < 2 || argc > 4) {		printf("usage: %s username [password] [account]\n", argv[0]);		code = -1;		return (0);	}	n = command("USER %s", argv[1]);	if (n == CONTINUE) {		if (argc < 3 ){			if (strcmp(argv[1], "anonymous") == 0) {				printf("Password: "); (void) fflush(stdout);				(void) fgets(acct, sizeof(acct) - 1, stdin);				acct[strlen(acct) - 1] = '\0';				argv[2] = acct;			} else				argv[2] = getpass("Password: ");			argc++;		}		n = command("PASS %s", argv[2]);	}	if (n == CONTINUE) {		if (argc < 4) {			printf("Account: "); (void) fflush(stdout);			(void) fgets(acct, sizeof(acct) - 1, stdin);			acct[strlen(acct) - 1] = '\0';			argv[3] = acct; argc++;		}		n = command("ACCT %s", argv[3]);		aflag++;	}	if (n != COMPLETE) {		fprintf(stdout, "Login failed.\n");		return (0);	}	if (!aflag && argc == 4) {		(void) command("ACCT %s", argv[3]);	}	return (1);}/* * Print working directory. *//*VARARGS*/pwd(){	int oldverbose = verbose;	/*	 * If we aren't verbose, this doesn't do anything!	 */	verbose = 1;	if (command("PWD") == ERROR && code == 500) {		printf("PWD command not recognized, trying XPWD\n");		(void) command("XPWD");	}	verbose = oldverbose;}/* * Make a directory. */makedir(argc, argv)	int argc;	char *argv[];{	if (argc < 2 && !another(&argc, &argv, "directory-name")) {		printf("usage: %s directory-name\n", argv[0]);		code = -1;		return;	}	if (command("MKD %s", argv[1]) == ERROR && code == 500) {		if (verbose)			printf("MKD command not recognized, trying XMKD\n");		(void) command("XMKD %s", argv[1]);	}}/* * Remove a directory. */removedir(argc, argv)	int argc;	char *argv[];{	if (argc < 2 && !another(&argc, &argv, "directory-name")) {		printf("usage: %s directory-name\n", argv[0]);		code = -1;		return;	}	if (command("RMD %s", argv[1]) == ERROR && code == 500) {		if (verbose)			printf("RMD command not recognized, trying XRMD\n");		(void) command("XRMD %s", argv[1]);	}}/* * Send a line, verbatim, to the remote machine. */quote(argc, argv)	int argc;	char *argv[];{	if (argc < 2 && !another(&argc, &argv, "command line to send")) {		printf("usage: %s line-to-send\n", argv[0]);		code = -1;		return;	}	quote1("", argc, argv);}/* * Send a SITE command to the remote machine.  The line * is sent verbatim to the remote machine, except that the * word "SITE" is added at the front. */site(argc, argv)

⌨️ 快捷键说明

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