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

📄 utilities.cc

📁 这是关于远程登陆TELNET 的源代码 已经测试过的。
💻 CC
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 1988 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *//* * From: @(#)utilities.c	5.3 (Berkeley) 3/22/91 */char util_rcsid[] =   "$Id: utilities.cc,v 1.19 1999/12/12 15:33:40 dholland Exp $";#define	TELOPTS#define	TELCMDS#define	SLC_NAMES#include <arpa/telnet.h>#include <sys/types.h>#include <sys/time.h>#include <sys/socket.h>#include <unistd.h>#include <ctype.h>#include "ring.h"#include "defines.h"#include "externs.h"#include "proto.h"#include "terminal.h"FILE *NetTrace = 0;		/* Not in bss, since needs to stay */ /* ? */char NetTraceFile[256] = "(standard output)";/* * upcase() * *	Upcase (in place) the argument. */void upcase(char *str) {    for (int i=0; str[i]; i++) {	if (islower(str[i])) str[i] = toupper(str[i]);    }}/* * The following are routines used to print out debugging information. */void SetNetTrace(const char *file) {    if (NetTrace && NetTrace != stdout)	fclose(NetTrace);    if (file && strcmp(file, "-")) {	NetTrace = fopen(file, "w");	if (NetTrace) {	    strcpy((char *)NetTraceFile, file);	    return;	}	fprintf(stderr, "Cannot open %s.\n", file);    }    NetTrace = stdout;    strcpy((char *)NetTraceFile, "(standard output)");}#define BYTES_PER_LINE	32#define min(x,y) ((x<y)? x:y)void Dump(int direction, char *buffer, int length) {    char *pThis;    int offset;    offset = 0;    while (length) {	/* print one line */	fprintf(NetTrace, "%c 0x%x\t", direction, offset);	pThis = buffer;	if (0 /*prettydump*/) {	    buffer = buffer + min(length, BYTES_PER_LINE/2);	    while (pThis < buffer) {		fprintf(NetTrace, "%c%.2x",			(((*pThis)&0xff) == 0xff) ? '*' : ' ',			(*pThis)&0xff);		pThis++;	    }	    length -= BYTES_PER_LINE/2;	    offset += BYTES_PER_LINE/2;	} 	else {	    buffer = buffer + min(length, BYTES_PER_LINE);	    while (pThis < buffer) {		fprintf(NetTrace, "%.2x", (*pThis)&0xff);		pThis++;	    }	    length -= BYTES_PER_LINE;	    offset += BYTES_PER_LINE;	}	if (NetTrace == stdout) {	    fprintf(NetTrace, "\r\n");	} 	else {	    fprintf(NetTrace, "\n");	}	if (length < 0) {	    fflush(NetTrace);	    return;	}	/* find next unique line */    }    fflush(NetTrace);}void printoption(const char *direction, int cmd, int option) {    if (!showoptions)	return;    if (cmd == IAC) {	if (TELCMD_OK(option))	    fprintf(NetTrace, "%s IAC %s", direction, TELCMD(option));	else	    fprintf(NetTrace, "%s IAC %d", direction, option);    }     else {	const char *fmt;	fmt = (cmd == WILL) ? "WILL" : (cmd == WONT) ? "WONT" :	    (cmd == DO) ? "DO" : (cmd == DONT) ? "DONT" : 0;	if (fmt) {	    fprintf(NetTrace, "%s %s ", direction, fmt);	    if (TELOPT_OK(option))		fprintf(NetTrace, "%s", TELOPT(option));	    else if (option == TELOPT_EXOPL)		fprintf(NetTrace, "EXOPL");	    else		fprintf(NetTrace, "%d", option);	} 	else	    fprintf(NetTrace, "%s %d %d", direction, cmd, option);    }    if (NetTrace == stdout)	fprintf(NetTrace, "\r\n");    else	fprintf(NetTrace, "\n");    return;}void optionstatus(void) {    int i;    extern char will_wont_resp[], do_dont_resp[];    for (i = 0; i < 256; i++) {	if (do_dont_resp[i]) {	    if (TELOPT_OK(i))		printf("resp DO_DONT %s: %d\n", TELOPT(i), do_dont_resp[i]);	    else if (TELCMD_OK(i))		printf("resp DO_DONT %s: %d\n", TELCMD(i), do_dont_resp[i]);	    else		printf("resp DO_DONT %d: %d\n", i, do_dont_resp[i]);	    if (my_want_state_is_do(i)) {		if (TELOPT_OK(i))		    printf("want DO   %s\n", TELOPT(i));		else if (TELCMD_OK(i))		    printf("want DO   %s\n", TELCMD(i));		else		    printf("want DO   %d\n", i);	    } 	    else {		if (TELOPT_OK(i))		    printf("want DONT %s\n", TELOPT(i));		else if (TELCMD_OK(i))		    printf("want DONT %s\n", TELCMD(i));		else		    printf("want DONT %d\n", i);	    }	} 	else {	    if (my_state_is_do(i)) {		if (TELOPT_OK(i))		    printf("     DO   %s\n", TELOPT(i));		else if (TELCMD_OK(i))		    printf("     DO   %s\n", TELCMD(i));		else		    printf("     DO   %d\n", i);	    }	}	if (will_wont_resp[i]) {	    if (TELOPT_OK(i))		printf("resp WILL_WONT %s: %d\n", TELOPT(i), will_wont_resp[i]);	    else if (TELCMD_OK(i))		printf("resp WILL_WONT %s: %d\n", TELCMD(i), will_wont_resp[i]);	    else		printf("resp WILL_WONT %d: %d\n",				i, will_wont_resp[i]);	    if (my_want_state_is_will(i)) {		if (TELOPT_OK(i))		    printf("want WILL %s\n", TELOPT(i));		else if (TELCMD_OK(i))		    printf("want WILL %s\n", TELCMD(i));		else		    printf("want WILL %d\n", i);	    } 	    else {		if (TELOPT_OK(i))		    printf("want WONT %s\n", TELOPT(i));		else if (TELCMD_OK(i))		    printf("want WONT %s\n", TELCMD(i));		else		    printf("want WONT %d\n", i);	    }	} 	else {	    if (my_state_is_will(i)) {		if (TELOPT_OK(i))		    printf("     WILL %s\n", TELOPT(i));		else if (TELCMD_OK(i))		    printf("     WILL %s\n", TELCMD(i));		else		    printf("     WILL %d\n", i);	    }	}    }}/* direction: '<' or '>' *//* pointer: where suboption data sits *//* length: length of suboption data */void printsub(int direction, unsigned char *pointer, int length) {    register int i = 0;    extern int want_status_response;    if (showoptions || direction == 0 ||	(want_status_response && (pointer[0] == TELOPT_STATUS))) {	if (direction) {	    fprintf(NetTrace, "%s IAC SB ",				(direction == '<')? "RCVD":"SENT");	    if (length >= 3) {		register int j;		i = pointer[length-2];		j = pointer[length-1];		if (i != IAC || j != SE) {		    fprintf(NetTrace, "(terminated by ");		    if (TELOPT_OK(i))			fprintf(NetTrace, "%s ", TELOPT(i));		    else if (TELCMD_OK(i))			fprintf(NetTrace, "%s ", TELCMD(i));		    else			fprintf(NetTrace, "%d ", i);		    if (TELOPT_OK(j))			fprintf(NetTrace, "%s", TELOPT(j));		    else if (TELCMD_OK(j))			fprintf(NetTrace, "%s", TELCMD(j));		    else			fprintf(NetTrace, "%d", j);		    fprintf(NetTrace, ", not IAC SE!) ");		}	    }	    length -= 2;	}	if (length < 1) {	    fprintf(NetTrace, "(Empty suboption???)");	    return;	}	switch ((unsigned char)(pointer[0])) {	case TELOPT_TTYPE:	    fprintf(NetTrace, "TERMINAL-TYPE ");	    switch (pointer[1]) {	    case TELQUAL_IS:		fprintf(NetTrace, "IS \"%.*s\"", length-2, (char *)pointer+2);		break;	    case TELQUAL_SEND:		fprintf(NetTrace, "SEND");		break;	    default:		fprintf(NetTrace,				"- unknown qualifier %d (0x%x).",				pointer[1], pointer[1]);	    }	    break;	case TELOPT_TSPEED:	    fprintf(NetTrace, "TERMINAL-SPEED");	    if (length < 2) {		fprintf(NetTrace, " (empty suboption???)");		break;	    }	    switch (pointer[1]) {	    case TELQUAL_IS:		fprintf(NetTrace, " IS ");		fprintf(NetTrace, "%.*s", length-2, (char *)pointer+2);		break;	    default:		if (pointer[1] == 1)		    fprintf(NetTrace, " SEND");		else		    fprintf(NetTrace, " %d (unknown)", pointer[1]);		for (i = 2; i < length; i++)		    fprintf(NetTrace, " ?%d?", pointer[i]);		break;	    }	    break;	case TELOPT_LFLOW:	    fprintf(NetTrace, "TOGGLE-FLOW-CONTROL");	    if (length < 2) {		fprintf(NetTrace, " (empty suboption???)");		break;	    }	    switch (pointer[1]) {	    case 0:		fprintf(NetTrace, " OFF"); break;

⌨️ 快捷键说明

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