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

📄 netstat.c

📁 这是一个SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,CD MP3...有很好的参考价值.
💻 C
📖 第 1 页 / 共 2 页
字号:
	if (lnr == 0)		return;	more[0] = '\0';	num = sscanf(line,				 "%d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %X %lX:%lX %X:%lX %lX %d %d %ld %512s\n",				 &d, local_addr, &local_port,				 rem_addr, &rem_port, &state,				 &txq, &rxq, &timer_run, &time_len, &retr, &uid, &timeout, &inode, more);	if (strlen(local_addr) > 8) {#if CONFIG_FEATURE_IPV6		sscanf(local_addr, "%08X%08X%08X%08X",			   &in6.s6_addr32[0], &in6.s6_addr32[1],			   &in6.s6_addr32[2], &in6.s6_addr32[3]);		inet_ntop(AF_INET6, &in6, addr6, sizeof(addr6));		inet_pton(AF_INET6, addr6, (struct sockaddr *) &localaddr.sin6_addr);		sscanf(rem_addr, "%08X%08X%08X%08X",			   &in6.s6_addr32[0], &in6.s6_addr32[1],			   &in6.s6_addr32[2], &in6.s6_addr32[3]);		inet_ntop(AF_INET6, &in6, addr6, sizeof(addr6));		inet_pton(AF_INET6, addr6, (struct sockaddr *) &remaddr.sin6_addr);		localaddr.sin6_family = AF_INET6;		remaddr.sin6_family = AF_INET6;#endif	} else {		sscanf(local_addr, "%X",			   &((struct sockaddr_in *) &localaddr)->sin_addr.s_addr);		sscanf(rem_addr, "%X",			   &((struct sockaddr_in *) &remaddr)->sin_addr.s_addr);		((struct sockaddr *) &localaddr)->sa_family = AF_INET;		((struct sockaddr *) &remaddr)->sa_family = AF_INET;	}	if (num < 10) {		error_msg("warning, got bogus raw line.");		return;	}	state_str=itoa(state);#if CONFIG_FEATURE_IPV6#define notnull(A) (((A.sin6_family == AF_INET6) &&            \					 ((A.sin6_addr.s6_addr32[0]) ||            \					  (A.sin6_addr.s6_addr32[1]) ||            \					  (A.sin6_addr.s6_addr32[2]) ||            \					  (A.sin6_addr.s6_addr32[3]))) ||          \					((A.sin6_family == AF_INET) &&             \					 ((struct sockaddr_in *) &A)->sin_addr.s_addr))#else#define notnull(A) (A.sin_addr.s_addr)#endif	if ((notnull(remaddr) && (flags&NETSTAT_CONNECTED)) ||		(!notnull(remaddr) && (flags&NETSTAT_LISTENING)))	{		snprint_ip_port(local_addr, sizeof(local_addr),						(struct sockaddr *) &localaddr, local_port,						"raw", flags&NETSTAT_NUMERIC);								snprint_ip_port(rem_addr, sizeof(rem_addr),						(struct sockaddr *) &remaddr, rem_port,						"raw", flags&NETSTAT_NUMERIC);		printf("raw   %6ld %6ld %-23s %-23s %-12s\n",			   rxq, txq, local_addr, rem_addr, state_str);	}}#define HAS_INODE 1static void unix_do_one(int nr, const char *line){	static int has = 0;	char path[PATH_MAX], ss_flags[32];	char *ss_proto, *ss_state, *ss_type;	int num, state, type, inode;	void *d;	unsigned long refcnt, proto, unix_flags;	if (nr == 0) {		if (strstr(line, "Inode"))			has |= HAS_INODE;		return;	}	path[0] = '\0';	num = sscanf(line, "%p: %lX %lX %lX %X %X %d %s",				 &d, &refcnt, &proto, &unix_flags, &type, &state, &inode, path);	if (num < 6) {		error_msg("warning, got bogus unix line.");		return;	}	if (!(has & HAS_INODE))		snprintf(path,sizeof(path),"%d",inode);	if ((flags&(NETSTAT_LISTENING|NETSTAT_CONNECTED))!=(NETSTAT_LISTENING|NETSTAT_CONNECTED)) {		if ((state == SS_UNCONNECTED) && (unix_flags & SO_ACCEPTCON)) {			if (!(flags&NETSTAT_LISTENING))				return;		} else {			if (!(flags&NETSTAT_CONNECTED))				return;		}	}	switch (proto) {		case 0:			ss_proto = "unix";			break;		default:			ss_proto = "??";	}	switch (type) {		case SOCK_STREAM:			ss_type = "STREAM";			break;		case SOCK_DGRAM:			ss_type = "DGRAM";			break;		case SOCK_RAW:			ss_type = "RAW";			break;		case SOCK_RDM:			ss_type = "RDM";			break;		case SOCK_SEQPACKET:			ss_type = "SEQPACKET";			break;		default:			ss_type = "UNKNOWN";	}	switch (state) {		case SS_FREE:			ss_state = "FREE";			break;		case SS_UNCONNECTED:			/*			 * Unconnected sockets may be listening			 * for something.			 */			if (unix_flags & SO_ACCEPTCON) {				ss_state = "LISTENING";			} else {				ss_state = "";			}			break;		case SS_CONNECTING:			ss_state = "CONNECTING";			break;		case SS_CONNECTED:			ss_state = "CONNECTED";			break;		case SS_DISCONNECTING:			ss_state = "DISCONNECTING";			break;		default:			ss_state = "UNKNOWN";	}	strcpy(ss_flags, "[ ");	if (unix_flags & SO_ACCEPTCON)		strcat(ss_flags, "ACC ");	if (unix_flags & SO_WAITDATA)		strcat(ss_flags, "W ");	if (unix_flags & SO_NOSPACE)		strcat(ss_flags, "N ");	strcat(ss_flags, "]");	printf("%-5s %-6ld %-11s %-10s %-13s ",		   ss_proto, refcnt, ss_flags, ss_type, ss_state);	if (has & HAS_INODE)		printf("%-6d ",inode);	else		printf("-      ");	puts(path);}#define _PATH_PROCNET_UDP "/proc/net/udp"#define _PATH_PROCNET_UDP6 "/proc/net/udp6"#define _PATH_PROCNET_TCP "/proc/net/tcp"#define _PATH_PROCNET_TCP6 "/proc/net/tcp6"#define _PATH_PROCNET_RAW "/proc/net/raw"#define _PATH_PROCNET_RAW6 "/proc/net/raw6"#define _PATH_PROCNET_UNIX "/proc/net/unix"static void do_info(const char *file, const char *name, void (*proc)(int, const char *)){	char buffer[8192];	int lnr = 0;	FILE *procinfo;	procinfo = fopen(file, "r");	if (procinfo == NULL) {		if (errno != ENOENT) {			perror(file);		} else {		error_msg("no support for `%s' on this system.", name);		}	} else {		do {			if (fgets(buffer, sizeof(buffer), procinfo))				(proc)(lnr++, buffer);		} while (!feof(procinfo));		fclose(procinfo);	}}/* * Our main function. */int netstat_main(int argc, char **argv){	int opt;	int new_flags=0;	int showroute = 0, extended = 0; #if CONFIG_FEATURE_IPV6	int inet=1;	int inet6=1;#else#define inet 1#define inet6 0#endif	while ((opt = getopt(argc, argv, "laenrtuwx")) != -1)		switch (opt) {		case 'l':			flags &= ~NETSTAT_CONNECTED;			flags |= NETSTAT_LISTENING;			break;		case 'a':			flags |= NETSTAT_LISTENING | NETSTAT_CONNECTED;			break;		case 'n':			flags |= NETSTAT_NUMERIC;			break;		case 'r':			showroute = 1;			break;		case 'e':			extended = 1;			break;		case 't':			new_flags |= NETSTAT_TCP;			break;		case 'u':			new_flags |= NETSTAT_UDP;			break;		case 'w':			new_flags |= NETSTAT_RAW;			break;		case 'x':			new_flags |= NETSTAT_UNIX;			break;		default:			show_usage();		}	if ( showroute ) {#ifdef CONFIG_ROUTE			displayroutes ( flags & NETSTAT_NUMERIC, !extended );		return 0; #else		error_msg_and_die( "-r (display routing table) is not compiled in." );#endif	}				if (new_flags) {		flags &= ~(NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW|NETSTAT_UNIX);		flags |= new_flags;	}	if (flags&(NETSTAT_TCP|NETSTAT_UDP|NETSTAT_RAW)) {		printf("Active Internet connections ");	/* xxx */		if ((flags&(NETSTAT_LISTENING|NETSTAT_CONNECTED))==(NETSTAT_LISTENING|NETSTAT_CONNECTED))			printf("(servers and established)");		else {			if (flags&NETSTAT_LISTENING)				printf("(only servers)");			else				printf("(w/o servers)");		}		printf("\nProto Recv-Q Send-Q Local Address           Foreign Address         State      \n");	}	if (inet && flags&NETSTAT_TCP)		do_info(_PATH_PROCNET_TCP,"AF INET (tcp)",tcp_do_one);#if CONFIG_FEATURE_IPV6	if (inet6 && flags&NETSTAT_TCP)		do_info(_PATH_PROCNET_TCP6,"AF INET6 (tcp)",tcp_do_one);#endif	if (inet && flags&NETSTAT_UDP)		do_info(_PATH_PROCNET_UDP,"AF INET (udp)",udp_do_one);#if CONFIG_FEATURE_IPV6	if (inet6 && flags&NETSTAT_UDP)		do_info(_PATH_PROCNET_UDP6,"AF INET6 (udp)",udp_do_one);#endif	if (inet && flags&NETSTAT_RAW)		do_info(_PATH_PROCNET_RAW,"AF INET (raw)",raw_do_one);#if CONFIG_FEATURE_IPV6	if (inet6 && flags&NETSTAT_RAW)		do_info(_PATH_PROCNET_RAW6,"AF INET6 (raw)",raw_do_one);#endif	if (flags&NETSTAT_UNIX) {		printf("Active UNIX domain sockets ");		if ((flags&(NETSTAT_LISTENING|NETSTAT_CONNECTED))==(NETSTAT_LISTENING|NETSTAT_CONNECTED))			printf("(servers and established)");		else {			if (flags&NETSTAT_LISTENING)				printf("(only servers)");			else				printf("(w/o servers)");		}		printf("\nProto RefCnt Flags       Type       State         I-Node Path\n");		do_info(_PATH_PROCNET_UNIX,"AF UNIX",unix_do_one);	}	return 0;}

⌨️ 快捷键说明

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