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

📄 netstat.c

📁 Linux下网络相关工具源代码。
💻 C
📖 第 1 页 / 共 4 页
字号:
	    (void) ap->input(4, dad, &sa);	    strcpy(buf, ap->sprint(&sa, flag_not));	    snprintf(dad, sizeof(dad), "%s:%04X", buf, dport);	} else	    strcpy(dad, "-");	printf("IPX   %6ld %6ld %-26s %-26s %-5s", txq, rxq, sad, dad, st);	if (flag_exp > 1) {	    if (!flag_not && ((pw = getpwuid(uid)) != NULL))		printf(" %-10s", pw->pw_name);	    else		printf(" %-10d", uid);	}	printf("\n");    }    fclose(f);    return 0;}#endifvoid ife_print(struct interface *ptr){    printf("%-5.5s ", ptr->name);    printf("%5d %3d ", ptr->mtu, ptr->metric);    /* If needed, display the interface statistics. */    if (ptr->statistics_valid) {	printf("%8lu %6lu %6lu %6lu ",	       ptr->stats.rx_packets, ptr->stats.rx_errors,	       ptr->stats.rx_dropped, ptr->stats.rx_fifo_errors);	printf("%8lu %6lu %6lu %6lu ",	       ptr->stats.tx_packets, ptr->stats.tx_errors,	       ptr->stats.tx_dropped, ptr->stats.tx_fifo_errors);    } else {	printf("%-56s", _("     - no statistics available -"));    }    if (ptr->flags == 0)	printf(_("[NO FLAGS]"));    if (ptr->flags & IFF_ALLMULTI)	printf("A");    if (ptr->flags & IFF_BROADCAST)	printf("B");    if (ptr->flags & IFF_DEBUG)	printf("D");    if (ptr->flags & IFF_LOOPBACK)	printf("L");    if (ptr->flags & IFF_PROMISC)	printf("M");    if (ptr->flags & IFF_NOTRAILERS)	printf("N");    if (ptr->flags & IFF_NOARP)	printf("O");    if (ptr->flags & IFF_POINTOPOINT)	printf("P");    if (ptr->flags & IFF_RUNNING)	printf("R");    if (ptr->flags & IFF_UP)	printf("U");    printf("\n");}static int iface_info(void){    if ((skfd = sockets_open(0)) < 0) {	perror("socket");	exit(1);    }    printf(_("Kernel Interface table\n"));    printf(_("Iface   MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));    if (for_all_interfaces(do_if_print, &flag_all) < 0) {	perror(_("missing interface information"));	exit(1);    }    if (!flag_cnt)        close(skfd);    skfd = -1;    return 0;}static void version(void){    printf("%s\n%s\n%s\n%s\n", Release, Version, Signature, Features);    exit(E_VERSION);}static void usage(void){    fprintf(stderr, _("usage: netstat [-veenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}\n"));    fprintf(stderr, _("       netstat [-vnNcaeol] [<Socket> ...]\n"));    fprintf(stderr, _("       netstat { [-veenNac] -i | [-cnNe] -M | -s }\n\n"));    fprintf(stderr, _("        -r, --route              display routing table\n"));    fprintf(stderr, _("        -i, --interfaces         display interface table\n"));    fprintf(stderr, _("        -g, --groups             display multicast group memberships\n"));    fprintf(stderr, _("        -s, --statistics         display networking statistics (like SNMP)\n"));#if HAVE_FW_MASQUERADE    fprintf(stderr, _("        -M, --masquerade         display masqueraded connections\n\n"));#endif    fprintf(stderr, _("        -v, --verbose            be verbose\n"));    fprintf(stderr, _("        -n, --numeric            dont resolve names\n"));    fprintf(stderr, _("        -N, --symbolic           resolve hardware names\n"));    fprintf(stderr, _("        -e, --extend             display other/more information\n"));    fprintf(stderr, _("        -p, --programs           display PID/Program name for sockets\n"));    fprintf(stderr, _("        -c, --continuous         continuous listing\n\n"));    fprintf(stderr, _("        -l, --listening          display listening server sockets\n"));    fprintf(stderr, _("        -a, --all, --listening   display all sockets (default: connected)\n"));    fprintf(stderr, _("        -o, --timers             display timers\n"));    fprintf(stderr, _("        -F, --fib                display Forwarding Information Base (default)\n"));    fprintf(stderr, _("        -C, --cache              display routing cache instead of FIB\n\n"));    fprintf(stderr, _("  <Socket>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom\n"));    fprintf(stderr, _("  <AF>=Use '-A <af>' or '--<af>' Default: %s\n"), DFLT_AF);    fprintf(stderr, _("  List of possible address families (which support routing):\n"));    print_aflist(1); /* 1 = routeable */    exit(E_USAGE);}int main (int argc, char *argv[]) {    int i;    int lop;    struct option longopts[] =    {	AFTRANS_OPTS,	{"version", 0, 0, 'V'},	{"interfaces", 0, 0, 'i'},	{"help", 0, 0, 'h'},	{"route", 0, 0, 'r'},	{"netlink", 2, 0, 'L'},#if HAVE_FW_MASQUERADE	{"masquerade", 0, 0, 'M'},#endif	{"protocol", 1, 0, 'A'},	{"tcp", 0, 0, 't'},	{"udp", 0, 0, 'u'},	{"raw", 0, 0, 'w'},	{"unix", 0, 0, 'x'},	{"listening", 0, 0, 'l'},	{"all", 0, 0, 'a'},	{"timers", 0, 0, 'o'},	{"continuous", 0, 0, 'c'},	{"extend", 0, 0, 'e'},	{"programs", 0, 0, 'p'},	{"verbose", 0, 0, 'v'},	{"statistics", 0, 0, 's'},	{"numeric", 0, 0, 'n'},	{"symbolic", 0, 0, 'N'},	{"cache", 0, 0, 'C'},	{"fib", 0, 0, 'F'},	{"groups", 0, 0, 'g'},	{NULL, 0, 0, 0}    };#if I18N    bindtextdomain("net-tools", "/usr/share/locale");    textdomain("net-tools");#endif    getroute_init();		/* Set up AF routing support */    afname[0] = '\0';    while ((i = getopt_long(argc, argv, "MCFA:acdegphinNorstuVv?wxl", longopts, &lop)) != EOF)	switch (i) {	case -1:	    break;	case 1:	    if (lop < 0 || lop >= AFTRANS_CNT) {		EINTERN("netstat.c", "longopts 1 range");		break;	    }	    if (aftrans_opt(longopts[lop].name))		exit(1);	    break;	case 'A':	    if (aftrans_opt(optarg))		exit(1);	    break;	case 'M':	    flag_mas++;	    break;	case 'a':	    flag_all++;	    break;	case 'l':	    flag_lst++;	    break;	case 'c':	    flag_cnt++;	    break;	case 'd':	    flag_deb++;	    break;	case 'g':	    flag_igmp++;	    break;	case 'e':	    flag_exp++;	    break;	case 'p':	    flag_prg++;	    break;	case 'i':	    flag_int++;	    break;	case 'n':	    flag_not |= FLAG_NUM;	    break;	case 'N':	    flag_not |= FLAG_SYM;	    break;	case 'C':	    flag_cf |= FLAG_CACHE;	    break;	case 'F':	    flag_cf |= FLAG_FIB;	    break;	case 'o':	    flag_opt++;	    break;	case 'V':	    version();	    /*NOTREACHED */	case 'v':	    flag_ver |= FLAG_VERBOSE;	    break;	case 'r':	    flag_rou++;	    break;	case 't':	    flag_tcp++;	    break;	case 'u':	    flag_udp++;	    break;	case 'w':	    flag_raw++;	    break;	case 'x':	    if (aftrans_opt("unix"))		exit(1);	    break;	case '?':	case 'h':	    usage();	case 's':	    flag_sta++;	}    if (flag_int + flag_rou + flag_mas + flag_sta > 1)	usage();    if ((flag_inet || flag_inet6 || flag_sta) && !(flag_tcp || flag_udp || flag_raw))	flag_tcp = flag_udp = flag_raw = 1;    if ((flag_tcp || flag_udp || flag_raw || flag_igmp) && !(flag_inet || flag_inet6))        flag_inet = flag_inet6 = 1;    flag_arg = flag_tcp + flag_udp + flag_raw + flag_unx + flag_ipx	+ flag_ax25 + flag_netrom + flag_igmp;    if (flag_mas) {#if HAVE_FW_MASQUERADE && HAVE_AFINET#if MORE_THAN_ONE_MASQ_AF	if (!afname[0])	    strcpy(afname, DFLT_AF);#endif	for (;;) {	    i = ip_masq_info(flag_not, flag_exp);	    if (i || !flag_cnt)		break;	    sleep(1);	}#else	ENOSUPP("netstat.c", "FW_MASQUERADE");	i = -1;#endif	return (i);    }    if (flag_sta) {        inittab();	parsesnmp(flag_raw, flag_tcp, flag_udp);	exit(0);    }        if (flag_rou) {	int options = 0;	if (!afname[0])	    strcpy(afname, DFLT_AF);	if (flag_exp == 2)	    flag_exp = 1;	else if (flag_exp == 1)	    flag_exp = 2;	options = (flag_exp & FLAG_EXT) | flag_not | flag_cf | flag_ver;	if (!flag_cf)	    options |= FLAG_FIB;	for (;;) {	    i = route_info(afname, options);	    if (i || !flag_cnt)		break;	    sleep(1);	}	return (i);    }    if (flag_int) {	for (;;) {	    i = iface_info();	    if (!flag_cnt || i)		break;	    sleep(1);	}	return (i);    }    for (;;) {	if (!flag_arg || flag_tcp || flag_udp || flag_raw) {#if HAVE_AFINET	    prg_cache_load();	    printf(_("Active Internet connections "));	/* xxx */	    if (flag_all)		printf(_("(servers and established)"));	    else {	      if (flag_lst)		printf(_("(only servers)"));	      else		printf(_("(w/o servers)"));	    }	    printf(_("\nProto Recv-Q Send-Q Local Address           Foreign Address         State      "));	/* xxx */	    if (flag_exp > 1)		printf(_(" User       Inode     "));	    print_progname_banner();	    if (flag_opt)		printf(_(" Timer"));	/* xxx */	    printf("\n");#else	    if (flag_arg) {		i = 1;		ENOSUPP("netstat", "AF INET");	    }#endif	}#if HAVE_AFINET	if (!flag_arg || flag_tcp) {	    i = tcp_info();	    if (i)		return (i);	}	if (!flag_arg || flag_udp) {	    i = udp_info();	    if (i)		return (i);	}	if (!flag_arg || flag_raw) {	    i = raw_info();	    if (i)		return (i);	}	if (flag_igmp) {#if HAVE_AFINET6	    printf( "IPv6/");#endif	    printf( _("IPv4 Group Memberships\n") );	    printf( _("Interface       RefCnt Group\n") );	    printf( "--------------- ------ ---------------------\n" );	    i = igmp_info();	    if (i)	        return (i);	}#endif	if (!flag_arg || flag_unx) {#if HAVE_AFUNIX	    prg_cache_load();	    i = unix_info();	    if (i)		return (i);#else	    if (flag_arg) {		i = 1;		ENOSUPP("netstat", "AF UNIX");	    }#endif	}	if (!flag_arg || flag_ipx) {#if HAVE_AFIPX	    i = ipx_info();	    if (i)		return (i);#else	    if (flag_arg) {		i = 1;		ENOSUPP("netstat", "AF IPX");	    }#endif	}	if (!flag_arg || flag_ax25) {#if HAVE_AFAX25	    i = ax25_info();	    if (i)		return (i);#else	    if (flag_arg) {		i = 1;		ENOSUPP("netstat", "AF AX25");	    }#endif	}	if (!flag_arg || flag_netrom) {#if HAVE_AFNETROM	    i = netrom_info();	    if (i)		return (i);#else	    if (flag_arg) {		i = 1;		ENOSUPP("netstat", "AF NETROM");	    }#endif	}	if (!flag_cnt || i)	    break;	sleep(1);	prg_cache_clear();    }    return (i);}

⌨️ 快捷键说明

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