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

📄 finger.c

📁 Linux下的socks的程序源程序,用于socks的代理服务
💻 C
字号:
#ifdef SOCKS#define connect Rconnect#endif#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <stdio.h>#include <sys/file.h>#include <errno.h>#if defined(ISC)#include <net/errno.h>#endif /* #if defined(ISC) */#include "socks.h"extern int	errno;extern char	*strrchr();char		*Progname;extern char	*getenv();int main(argc, argv)int	argc;char	**argv;{	char			buf[1024];	unsigned long		l;	struct sockaddr_in	sin;	struct hostent		*hp;	struct servent		*sp;	int			c, v, n, i, ind;	int			s;	extern int		optind;	FILE			*in;	char			*cp;#ifdef WHOIS_SERVER	char			*service = "whois", *host = WHOIS_SERVER;#else	char			*service = "finger", *host = "localhost";#endif	struct in_addr	dstaddr[21];#ifdef LINUX	int                     optind = 1;#else	extern int		optind;#endif	extern char		*optarg;		if ((Progname = strrchr(argv[0], '/')) == NULL)		Progname = argv[0];	else		Progname++;#if defined(SOCKS) || defined(connect)	SOCKSinit(Progname);#endif#ifdef WHOIS_SERVER	while ((i = getopt(argc,argv,"h:")) != EOF) {		switch (i) {		case 'h':			host = optarg;			break;		default:			fprintf(stderr,"Usage: %s [-h host] name\n", Progname);			exit(1);		}	}#endif	*(cp = buf) = '\0';	for (i = optind; i < argc; i++) {		strcat(cp, " ");		cp++;	    if (strcmp(argv[i], "-l")) {		strcat(cp, argv[i]);		cp += strlen(argv[i]);	    } else {		strcat(cp, "/W ");		cp += 3;	    }	}#ifndef WHOIS_SERVER	if ((cp = strrchr(buf, '@')) != NULL) {		*cp = '\0';		host = cp + 1;	} else {		if ((cp = getenv("ORIG_FINGER")) == NULL) cp = ORIG_FINGER;		execvp(cp, argv);		fprintf(stderr, "Unable to run %s\n", cp);		exit(1);	}#endif	sin.sin_family = AF_INET;	if ((sp = getservbyname(service, "tcp")) == NULL) {		if ((v = atoi(service)) == 0) {			fprintf(stderr, "%s: unknown service '%s'\n",				Progname, service);			exit(1);		}		sin.sin_port = htons((short) v);	} else {		sin.sin_port = sp->s_port;	}	if ((hp = gethostbyname(host)) == NULL) {		if ((l = inet_addr(host)) == -1) {			fprintf(stderr, "%s: unknown host '%s'\n",				Progname, host);			exit(1);		}/* you are out of luck if your system doesn't use 2's complement in   integer representation */		sin.sin_addr.s_addr = l ;	} else {		for (i = 0; (i < 20) && *hp->h_addr_list;			   i++, hp->h_addr_list++)			bcopy(*hp->h_addr_list, &(dstaddr[i].s_addr), hp->h_length);		dstaddr[i].s_addr = 0;			i = 0;		sin.sin_addr.s_addr = dstaddr[i++].s_addr;	}	if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {		fprintf(stderr, "%s: ", Progname);		perror("socket");		exit(1);	}	while (connect(s, &sin, sizeof(sin)) < 0) {		if ((errno == ETIMEDOUT) && (hp != NULL) && 		    ((sin.sin_addr.s_addr = dstaddr[i++].s_addr) != 0)) {			continue;		}		fprintf(stderr, "%s: ", Progname);		perror("connect");		exit(1);	}	cp = buf;	if (*cp = ' ') cp++;	strcat(cp, "\r\n");	if (write(s,cp,strlen(cp)) < 0) {		fprintf(stderr, "%s: ", Progname);		perror("write");	}	while ((n = read(s, buf, sizeof(buf) - 1)) > 0) {		write(1, buf, n);	}	close(s);}

⌨️ 快捷键说明

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