亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? interface.c.old

?? Linux下網絡相關工具源代碼。
?? OLD
字號:
/* Code to manipulate interface information, shared between ifconfig and   netstat.    10/1998 partly rewriten by Andi Kleen to support an interface list.      I don't claim that the list operations are efficient @).     $Id: interface.c,v 1.2 1999/03/03 19:40:42 philip Exp $ */#include "config.h"#include <sys/types.h>#include <sys/socket.h>#include <sys/ioctl.h>#include <netinet/in.h>#include <net/if.h>#include <stdio.h>#include <errno.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <ctype.h>#if HAVE_AFIPX#if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1)#include <netipx/ipx.h>#else#include "ipx.h"#endif#endif#if !defined(_NETECONET_EC_H) && HAVE_AFECONET#include <linux/if_ec.h>#endif#ifdef HAVE_HWSLIP#include <linux/if_slip.h>#include <net/if_arp.h>#endif#include "net-support.h"#include "pathnames.h"#include "version.h"#include "proc.h"#include "interface.h"#include "sockets.h"#include "util.h"#include "intl.h"int procnetdev_vsn = 1;static struct interface *int_list;void add_interface(struct interface *n){    struct interface *ife, **pp;    pp = &int_list;    for (ife = int_list; ife; pp = &ife->next, ife = ife->next) {	if (nstrcmp(ife->name, n->name) > 0)	    break;    }    n->next = (*pp);    (*pp) = n;}struct interface *lookup_interface(char *name){    struct interface *ife = NULL;    if (int_list || if_readlist() >= 0) { 	for (ife = int_list; ife; ife = ife->next) {	    if (!strcmp(ife->name, name))		break;	}    }    if (!ife) { 	new(ife);	safe_strncpy(ife->name, name, IFNAMSIZ);  	add_interface(ife);    }    return ife;}int for_all_interfaces(int (*doit) (struct interface *, void *), void *cookie){    struct interface *ife;    if (!int_list && (if_readlist() < 0))	return -1;    for (ife = int_list; ife; ife = ife->next) {	int err = doit(ife, cookie);	if (err)	    return err;    }    return 0;}static int if_readconf(void){    int numreqs = 30;    struct ifconf ifc;    struct ifreq *ifr;    int n, err = -1;    int skfd;    /* SIOCGIFCONF currently seems to only work properly on AF_INET sockets       (as of 2.1.128) */     skfd = get_socket_for_af(AF_INET);    if (skfd < 0) {	fprintf(stderr, _("warning: no inet socket available: %s\n"),		strerror(errno));	/* Try to soldier on with whatever socket we can get hold of.  */	skfd = sockets_open(0);	if (skfd < 0)	    return -1;    }    ifc.ifc_buf = NULL;    for (;;) {	ifc.ifc_len = sizeof(struct ifreq) * numreqs;	ifc.ifc_buf = xrealloc(ifc.ifc_buf, ifc.ifc_len);	if (ioctl(skfd, SIOCGIFCONF, &ifc) < 0) {	    perror("SIOCGIFCONF");	    goto out;	}	if (ifc.ifc_len == sizeof(struct ifreq) * numreqs) {	    /* assume it overflowed and try again */	    numreqs += 10;	    continue;	}	break;    }    ifr = ifc.ifc_req;    for (n = 0; n < ifc.ifc_len; n += sizeof(struct ifreq)) {	lookup_interface(ifr->ifr_name);	ifr++;    }    err = 0;out:    free(ifc.ifc_buf);    return err;}static char *get_name(char *name, char *p){    while (isspace(*p))	p++;    while (*p) {	if (isspace(*p))	    break;	if (*p == ':') {	/* could be an alias */	    char *dot = p, *dotname = name;	    *name++ = *p++;	    while (isdigit(*p))		*name++ = *p++;	    if (*p != ':') {	/* it wasn't, backup */		p = dot;		name = dotname;	    }	    if (*p == '\0')		return NULL;	    p++;	    break;	}	*name++ = *p++;    }    *name++ = '\0';    return p;}static int procnetdev_version(char *buf){    if (strstr(buf, "compressed"))	return 3;    if (strstr(buf, "bytes"))	return 2;    return 1;}static int get_dev_fields(char *bp, struct interface *ife){    switch (procnetdev_vsn) {    case 3:	sscanf(bp,	"%ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld",	       &ife->stats.rx_bytes,	       &ife->stats.rx_packets,	       &ife->stats.rx_errors,	       &ife->stats.rx_dropped,	       &ife->stats.rx_fifo_errors,	       &ife->stats.rx_frame_errors,	       &ife->stats.rx_compressed,	       &ife->stats.rx_multicast,	       &ife->stats.tx_bytes,	       &ife->stats.tx_packets,	       &ife->stats.tx_errors,	       &ife->stats.tx_dropped,	       &ife->stats.tx_fifo_errors,	       &ife->stats.collisions,	       &ife->stats.tx_carrier_errors,	       &ife->stats.tx_compressed);	break;    case 2:	sscanf(bp, "%ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld",	       &ife->stats.rx_bytes,	       &ife->stats.rx_packets,	       &ife->stats.rx_errors,	       &ife->stats.rx_dropped,	       &ife->stats.rx_fifo_errors,	       &ife->stats.rx_frame_errors,	       &ife->stats.tx_bytes,	       &ife->stats.tx_packets,	       &ife->stats.tx_errors,	       &ife->stats.tx_dropped,	       &ife->stats.tx_fifo_errors,	       &ife->stats.collisions,	       &ife->stats.tx_carrier_errors);	ife->stats.rx_multicast = 0;	break;    case 1:	sscanf(bp, "%ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld",	       &ife->stats.rx_packets,	       &ife->stats.rx_errors,	       &ife->stats.rx_dropped,	       &ife->stats.rx_fifo_errors,	       &ife->stats.rx_frame_errors,	       &ife->stats.tx_packets,	       &ife->stats.tx_errors,	       &ife->stats.tx_dropped,	       &ife->stats.tx_fifo_errors,	       &ife->stats.collisions,	       &ife->stats.tx_carrier_errors);	ife->stats.rx_bytes = 0;	ife->stats.tx_bytes = 0;	ife->stats.rx_multicast = 0;	break;    }    return 0;}int if_readlist(void){    FILE *fh;    char buf[512];    struct interface *ife;    int err;    fh = fopen(_PATH_PROCNET_DEV, "r");    if (!fh) {	perror(_PATH_PROCNET_DEV);	return -1;    }    fgets(buf, sizeof buf, fh);	/* eat line */    fgets(buf, sizeof buf, fh);#if 0				/* pretty, but can't cope with missing fields */    fmt = proc_gen_fmt(_PATH_PROCNET_DEV, 1, fh,		       "face", "",	/* parsed separately */		       "bytes", "%lu",		       "packets", "%lu",		       "errs", "%lu",		       "drop", "%lu",		       "fifo", "%lu",		       "frame", "%lu",		       "compressed", "%lu",		       "multicast", "%lu",		       "bytes", "%lu",		       "packets", "%lu",		       "errs", "%lu",		       "drop", "%lu",		       "fifo", "%lu",		       "colls", "%lu",		       "carrier", "%lu",		       "compressed", "%lu",		       NULL);    if (!fmt)	return -1;#else    procnetdev_vsn = procnetdev_version(buf);#endif    err = 0;    while (fgets(buf, sizeof buf, fh)) {	char *s;	new(ife);	s = get_name(ife->name, buf);	get_dev_fields(s, ife);	ife->statistics_valid = 1;	add_interface(ife);    }    if (ferror(fh)) {	perror(_PATH_PROCNET_DEV);	err = -1;    }    if (!err)	err = if_readconf();#if 0    free(fmt);#endif    return err;}/* Support for fetching an IPX address */#if HAVE_AFIPXstatic int ipx_getaddr(int sock, int ft, struct ifreq *ifr){    ((struct sockaddr_ipx *) &ifr->ifr_addr)->sipx_type = ft;    return ioctl(sock, SIOCGIFADDR, ifr);}#endif/* Fetch the interface configuration from the kernel. */int if_fetch(struct interface *ife){    struct ifreq ifr;    int fd;    char *ifname = ife->name;     strcpy(ifr.ifr_name, ifname);    if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)	return (-1);    ife->flags = ifr.ifr_flags;    strcpy(ifr.ifr_name, ifname);    if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0)	memset(ife->hwaddr, 0, 32);    else	memcpy(ife->hwaddr, ifr.ifr_hwaddr.sa_data, 8);    ife->type = ifr.ifr_hwaddr.sa_family;    strcpy(ifr.ifr_name, ifname);    if (ioctl(skfd, SIOCGIFMETRIC, &ifr) < 0)	ife->metric = 0;    else	ife->metric = ifr.ifr_metric;    strcpy(ifr.ifr_name, ifname);    if (ioctl(skfd, SIOCGIFMTU, &ifr) < 0)	ife->mtu = 0;    else	ife->mtu = ifr.ifr_mtu;    if (ife->type == ARPHRD_SLIP || ife->type == ARPHRD_CSLIP ||	ife->type == ARPHRD_SLIP6 || ife->type == ARPHRD_CSLIP6 ||	ife->type == ARPHRD_ADAPT) {#ifdef SIOCGOUTFILL	strcpy(ifr.ifr_name, ifname);	if (ioctl(skfd, SIOCGOUTFILL, &ifr) < 0)	    ife->outfill = 0;	else	    ife->outfill = (unsigned int) ifr.ifr_data;#endif#ifdef SIOCGKEEPALIVE	strcpy(ifr.ifr_name, ifname);	if (ioctl(skfd, SIOCGKEEPALIVE, &ifr) < 0)	    ife->keepalive = 0;	else	    ife->keepalive = (unsigned int) ifr.ifr_data;#endif    }    strcpy(ifr.ifr_name, ifname);    if (ioctl(skfd, SIOCGIFMAP, &ifr) < 0)	memset(&ife->map, 0, sizeof(struct ifmap));    else	memcpy(&ife->map, &ifr.ifr_map, sizeof(struct ifmap));    strcpy(ifr.ifr_name, ifname);    if (ioctl(skfd, SIOCGIFMAP, &ifr) < 0)	memset(&ife->map, 0, sizeof(struct ifmap));    else	ife->map = ifr.ifr_map;#ifdef HAVE_TXQUEUELEN    strcpy(ifr.ifr_name, ifname);    if (ioctl(skfd, SIOCGIFTXQLEN, &ifr) < 0)	ife->tx_queue_len = -1;	/* unknown value */    else	ife->tx_queue_len = ifr.ifr_qlen;#else    ife->tx_queue_len = -1;	/* unknown value */#endif#if HAVE_AFINET    /* IPv4 address? */    fd = get_socket_for_af(AF_INET);    if (fd >= 0) {	strcpy(ifr.ifr_name, ifname);	if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) {	    ife->has_ip = 1;	    ife->addr = ifr.ifr_addr;	    strcpy(ifr.ifr_name, ifname);	    if (ioctl(fd, SIOCGIFDSTADDR, &ifr) < 0)	        memset(&ife->dstaddr, 0, sizeof(struct sockaddr));	    else	        ife->dstaddr = ifr.ifr_dstaddr;	    strcpy(ifr.ifr_name, ifname);	    if (ioctl(fd, SIOCGIFBRDADDR, &ifr) < 0)	        memset(&ife->broadaddr, 0, sizeof(struct sockaddr));	    else		ife->broadaddr = ifr.ifr_broadaddr;	    strcpy(ifr.ifr_name, ifname);	    if (ioctl(fd, SIOCGIFNETMASK, &ifr) < 0)		memset(&ife->netmask, 0, sizeof(struct sockaddr));	    else		ife->netmask = ifr.ifr_netmask;	} else	    memset(&ife->addr, 0, sizeof(struct sockaddr));    }#endif#if HAVE_AFATALK    /* DDP address maybe ? */    fd = get_socket_for_af(AF_APPLETALK);    if (fd >= 0) {	strcpy(ifr.ifr_name, ifname);	if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) {	    ife->ddpaddr = ifr.ifr_addr;	    ife->has_ddp = 1;	}    }#endif#if HAVE_AFIPX    /* Look for IPX addresses with all framing types */    fd = get_socket_for_af(AF_IPX);    if (fd >= 0) {	strcpy(ifr.ifr_name, ifname);	if (!ipx_getaddr(fd, IPX_FRAME_ETHERII, &ifr)) {	    ife->has_ipx_bb = 1;	    ife->ipxaddr_bb = ifr.ifr_addr;	}	strcpy(ifr.ifr_name, ifname);	if (!ipx_getaddr(fd, IPX_FRAME_SNAP, &ifr)) {	    ife->has_ipx_sn = 1;	    ife->ipxaddr_sn = ifr.ifr_addr;	}	strcpy(ifr.ifr_name, ifname);	if (!ipx_getaddr(fd, IPX_FRAME_8023, &ifr)) {	    ife->has_ipx_e3 = 1;	    ife->ipxaddr_e3 = ifr.ifr_addr;	}	strcpy(ifr.ifr_name, ifname);	if (!ipx_getaddr(fd, IPX_FRAME_8022, &ifr)) {	    ife->has_ipx_e2 = 1;	    ife->ipxaddr_e2 = ifr.ifr_addr;	}    }#endif#if HAVE_AFECONET    /* Econet address maybe? */    fd = get_socket_for_af(AF_ECONET);    if (fd >= 0) {	strcpy(ifr.ifr_name, ifname);	if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) {	    ife->ecaddr = ifr.ifr_addr;	    ife->has_econet = 1;	}    }#endif    return 0;}int do_if_fetch(struct interface *ife){     if (if_fetch(ife) < 0) {	char *errmsg; 	if (errno == ENODEV) { 	    /* Give better error message for this case. */ 	    errmsg = _("Device not found"); 	} else { 	    errmsg = strerror(errno); 	}  	fprintf(stderr, _("%s: error fetching interface information: %s\n"),		ife->name, errmsg);	return -1;    }    return 0; }int do_if_print(struct interface *ife, void *cookie){    int *opt_a = (int *) cookie;    int res;     res = do_if_fetch(ife);     if (res >= 0) {   	if ((ife->flags & IFF_UP) || *opt_a)	    ife_print(ife);    }    return res;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合一区在线| 国产午夜精品在线观看| 成人丝袜视频网| 国产一区二区网址| 奇米777欧美一区二区| 一区二区成人在线| 亚洲乱码国产乱码精品精98午夜| 欧美—级在线免费片| 国产亚洲欧美在线| 国产午夜精品理论片a级大结局| 日韩欧美一区二区久久婷婷| 欧美一区二区三区小说| 日韩午夜三级在线| 精品国产一区二区三区不卡| 精品国产乱码久久久久久牛牛 | 51久久夜色精品国产麻豆| 色综合色综合色综合色综合色综合| 国产91精品一区二区麻豆亚洲| 国产激情一区二区三区| 从欧美一区二区三区| 99精品黄色片免费大全| 欧洲在线/亚洲| 91精品久久久久久久91蜜桃| 日韩丝袜美女视频| 26uuu国产电影一区二区| 国产精品色婷婷久久58| 亚洲精选免费视频| 一区二区三区日韩精品| 偷拍与自拍一区| 紧缚捆绑精品一区二区| zzijzzij亚洲日本少妇熟睡| 色欧美片视频在线观看在线视频| 欧美日韩国产另类不卡| 精品99一区二区三区| 亚洲天堂久久久久久久| 亚洲超碰精品一区二区| 国产剧情一区在线| 色拍拍在线精品视频8848| 欧美一级在线观看| 中文字幕日韩精品一区| 日日夜夜精品免费视频| 国产传媒欧美日韩成人| 欧美色区777第一页| 久久综合资源网| 一区二区三区四区蜜桃| 国产一区二区三区四区五区入口 | 国内精品在线播放| 色综合中文字幕| 日韩精品一区二区三区swag| 国产精品高潮久久久久无| 亚洲超丰满肉感bbw| 成人免费看黄yyy456| 欧美精品色一区二区三区| 国产精品午夜在线| 韩国v欧美v日本v亚洲v| 欧美视频一区二区三区在线观看 | 激情偷乱视频一区二区三区| 91麻豆高清视频| 久久久国产精品不卡| 亚洲图片自拍偷拍| 成人精品国产一区二区4080| 884aa四虎影成人精品一区| 国产精品久久久久久妇女6080| 日韩vs国产vs欧美| 欧美做爰猛烈大尺度电影无法无天| 精品国产乱码久久久久久图片| 一区二区三区在线视频免费| 国产福利精品一区二区| 精品嫩草影院久久| 日韩中文字幕1| 欧美日韩国产小视频| 一区二区三区欧美在线观看| 成人av影院在线| 国产校园另类小说区| 国产综合色视频| 日韩你懂的电影在线观看| 丝袜国产日韩另类美女| 欧美日韩你懂的| 亚洲成人精品影院| 色妞www精品视频| 日韩一区在线看| 91首页免费视频| 亚洲欧美一区二区三区国产精品| 丰满白嫩尤物一区二区| 国产亚洲午夜高清国产拍精品| 黑人巨大精品欧美黑白配亚洲| 91精品免费观看| 奇米影视一区二区三区小说| 6080午夜不卡| 久久99这里只有精品| 精品国产一区二区三区忘忧草| 久久草av在线| 久久久久亚洲综合| 成人a级免费电影| 亚洲欧美激情一区二区| 91成人在线精品| 天天操天天综合网| 日韩欧美亚洲国产另类| 国模套图日韩精品一区二区| 久久久精品日韩欧美| 99视频有精品| 午夜伦欧美伦电影理论片| 4hu四虎永久在线影院成人| 国产最新精品精品你懂的| 欧美国产成人精品| 欧美在线|欧美| 久久99久国产精品黄毛片色诱| 2021久久国产精品不只是精品| 成人综合在线网站| 一区二区高清免费观看影视大全 | 亚洲不卡av一区二区三区| 欧美男同性恋视频网站| 国产在线国偷精品免费看| 一区二区中文视频| 欧美精品1区2区| 成人视屏免费看| 亚洲高清免费视频| 国产日韩精品久久久| 欧美自拍丝袜亚洲| 国产精品综合视频| 天天综合网天天综合色| 国产欧美一区二区精品久导航| 在线观看日韩av先锋影音电影院| 日本va欧美va精品发布| 亚洲女同ⅹxx女同tv| 日韩欧美中文一区| 91欧美一区二区| 九九热在线视频观看这里只有精品| 《视频一区视频二区| 欧美一级日韩免费不卡| 91片黄在线观看| 国产精品一卡二| 日韩av一区二区三区四区| 一区在线播放视频| 久久久亚洲高清| 日韩一区二区三区四区| 色噜噜狠狠一区二区三区果冻| 狠狠色狠狠色综合日日91app| 一区二区三区四区五区视频在线观看 | 欧美日韩亚洲综合在线| 成人精品免费网站| 精品一区二区三区视频| 天天爽夜夜爽夜夜爽精品视频| 亚洲欧美一区二区三区极速播放| 久久九九久久九九| 欧美成人a视频| 日韩欧美中文一区二区| 欧美日韩国产大片| 欧美吞精做爰啪啪高潮| 97se狠狠狠综合亚洲狠狠| 国产精品自拍网站| 毛片av一区二区| 青青草97国产精品免费观看| 亚洲二区在线视频| 亚洲一区二区欧美激情| 怡红院av一区二区三区| 亚洲精品乱码久久久久久久久| 亚洲天堂精品视频| 亚洲另类在线制服丝袜| 亚洲精品成a人| 亚洲黄色免费网站| 亚洲伊人伊色伊影伊综合网| 亚洲免费观看在线观看| 亚洲精品久久嫩草网站秘色| 自拍偷拍国产精品| 亚洲美女偷拍久久| 亚洲久草在线视频| 亚洲一区日韩精品中文字幕| 一区二区三区中文免费| 一区二区三区免费在线观看| 一区二区三区四区亚洲| 亚洲在线视频网站| 免费人成网站在线观看欧美高清| 视频一区二区三区入口| 久久激情综合网| 国产成人在线看| 99re8在线精品视频免费播放| 91美女视频网站| 欧美精品日韩精品| 精品国产一区二区三区久久久蜜月 | 久草在线在线精品观看| 国产麻豆成人精品| 91蜜桃网址入口| 91精品国产91久久久久久最新毛片| 日韩视频免费直播| 欧美国产精品专区| 亚洲电影欧美电影有声小说| 日韩av电影免费观看高清完整版 | 精品在线观看视频| 成人av在线一区二区| 欧美系列一区二区| 精品欧美一区二区在线观看| 国产女人18毛片水真多成人如厕| ...av二区三区久久精品| 亚洲国产一区在线观看| 国产精品综合一区二区| 欧美自拍偷拍一区| 国产三级精品视频| 婷婷中文字幕综合| jizz一区二区|