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

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

?? ping6.c

?? IPv6環境中的ping實現
?? C
?? 第 1 頁 / 共 5 頁
字號:
	fdmasks = howmany(s + 1, NFDBITS) * sizeof(fd_mask);	if ((fdmaskp = malloc(fdmasks)) == NULL)		err(1, "malloc");	seenalrm = seenint = 0;#ifdef SIGINFO	seeninfo = 0;#endif	for (;;) {		struct msghdr m;		struct cmsghdr *cm;		u_char buf[1024];		struct iovec iov[2];		/* signal handling */		if (seenalrm) {			retransmit();			seenalrm = 0;			continue;		}		if (seenint) {			onint(SIGINT);			seenint = 0;			continue;		}#ifdef SIGINFO		if (seeninfo) {			summary();			seeninfo = 0;			continue;		}#endif		if (options & F_FLOOD) {			(void)pinger();			timeout.tv_sec = 0;			timeout.tv_usec = 10000;			tv = &timeout;		} else			tv = NULL;		memset(fdmaskp, 0, fdmasks);		FD_SET(s, fdmaskp);		cc = select(s + 1, fdmaskp, NULL, NULL, tv);		if (cc < 0) {			if (errno != EINTR) {				warn("select");				sleep(1);			}			continue;		} else if (cc == 0)			continue;		m.msg_name = (caddr_t)&from;		m.msg_namelen = sizeof(from);		memset(&iov, 0, sizeof(iov));		iov[0].iov_base = (caddr_t)packet;		iov[0].iov_len = packlen;		m.msg_iov = iov;		m.msg_iovlen = 1;		cm = (struct cmsghdr *)buf;		m.msg_control = (caddr_t)buf;		m.msg_controllen = sizeof(buf);		cc = recvmsg(s, &m, 0);		if (cc < 0) {			if (errno != EINTR) {				warn("recvmsg");				sleep(1);			}			continue;		} else if (cc == 0) {			int mtu;			/*			 * receive control messages only. Process the			 * exceptions (currently the only possiblity is			 * a path MTU notification.)			 */			if ((mtu = get_pathmtu(&m)) > 0) {				if ((options & F_VERBOSE) != 0) {					printf("new path MTU (%d) is "					    "notified\n", mtu);				}			}			continue;		} else {			/*			 * an ICMPv6 message (probably an echoreply) arrived.			 */			pr_pack(packet, cc, &m);		}		if (npackets && nreceived >= npackets)			break;	}	summary();	exit(nreceived == 0);}voidonsignal(sig)	int sig;{	switch (sig) {	case SIGALRM:		seenalrm++;		break;	case SIGINT:		seenint++;		break;#ifdef SIGINFO	case SIGINFO:		seeninfo++;		break;#endif	}}/* * retransmit -- *	This routine transmits another ping6. */voidretransmit(){	struct itimerval itimer;	if (pinger() == 0)		return;	/*	 * If we're not transmitting any more packets, change the timer	 * to wait two round-trip times if we've received any packets or	 * ten seconds if we haven't.	 */#define	MAXWAIT		10	if (nreceived) {		itimer.it_value.tv_sec =  2 * tmax / 1000;		if (itimer.it_value.tv_sec == 0)			itimer.it_value.tv_sec = 1;	} else		itimer.it_value.tv_sec = MAXWAIT;	itimer.it_interval.tv_sec = 0;	itimer.it_interval.tv_usec = 0;	itimer.it_value.tv_usec = 0;	(void)signal(SIGALRM, onint);	(void)setitimer(ITIMER_REAL, &itimer, NULL);}/* * pinger -- *	Compose and transmit an ICMP ECHO REQUEST packet.  The IP packet * will be added on by the kernel.  The ID field is our UNIX process ID, * and the sequence number is an ascending integer.  The first 8 bytes * of the data portion are used to hold a UNIX "timeval" struct in VAX * byte-order, to compute the round-trip time. */size_tpingerlen(){	size_t l;	if (options & F_FQDN)		l = ICMP6_NIQLEN + sizeof(dst.sin6_addr);	else if (options & F_FQDNOLD)		l = ICMP6_NIQLEN;	else if (options & F_NODEADDR)		l = ICMP6_NIQLEN + sizeof(dst.sin6_addr);	else if (options & F_SUPTYPES)		l = ICMP6_NIQLEN;	else		l = ICMP6ECHOLEN + datalen;	return l;}intpinger(){	struct icmp6_hdr *icp;	struct iovec iov[2];	int i, cc;	struct icmp6_nodeinfo *nip;	int seq;	if (npackets && ntransmitted >= npackets)		return(-1);	/* no more transmission */	icp = (struct icmp6_hdr *)outpack;	nip = (struct icmp6_nodeinfo *)outpack;	memset(icp, 0, sizeof(*icp));	icp->icmp6_cksum = 0;	seq = ntransmitted++;	CLR(seq % mx_dup_ck);	if (options & F_FQDN) {		icp->icmp6_type = ICMP6_NI_QUERY;		icp->icmp6_code = ICMP6_NI_SUBJ_IPV6;		nip->ni_qtype = htons(NI_QTYPE_FQDN);		nip->ni_flags = htons(0);		memcpy(nip->icmp6_ni_nonce, nonce,		    sizeof(nip->icmp6_ni_nonce));		*(u_int16_t *)nip->icmp6_ni_nonce = ntohs(seq);		memcpy(&outpack[ICMP6_NIQLEN], &dst.sin6_addr,		    sizeof(dst.sin6_addr));		cc = ICMP6_NIQLEN + sizeof(dst.sin6_addr);		datalen = 0;	} else if (options & F_FQDNOLD) {		/* packet format in 03 draft - no Subject data on queries */		icp->icmp6_type = ICMP6_NI_QUERY;		icp->icmp6_code = 0;	/* code field is always 0 */		nip->ni_qtype = htons(NI_QTYPE_FQDN);		nip->ni_flags = htons(0);		memcpy(nip->icmp6_ni_nonce, nonce,		    sizeof(nip->icmp6_ni_nonce));		*(u_int16_t *)nip->icmp6_ni_nonce = ntohs(seq);		cc = ICMP6_NIQLEN;		datalen = 0;	} else if (options & F_NODEADDR) {		icp->icmp6_type = ICMP6_NI_QUERY;		icp->icmp6_code = ICMP6_NI_SUBJ_IPV6;		nip->ni_qtype = htons(NI_QTYPE_NODEADDR);		nip->ni_flags = naflags;		memcpy(nip->icmp6_ni_nonce, nonce,		    sizeof(nip->icmp6_ni_nonce));		*(u_int16_t *)nip->icmp6_ni_nonce = ntohs(seq);		memcpy(&outpack[ICMP6_NIQLEN], &dst.sin6_addr,		    sizeof(dst.sin6_addr));		cc = ICMP6_NIQLEN + sizeof(dst.sin6_addr);		datalen = 0;	} else if (options & F_SUPTYPES) {		icp->icmp6_type = ICMP6_NI_QUERY;		icp->icmp6_code = ICMP6_NI_SUBJ_FQDN;	/*empty*/		nip->ni_qtype = htons(NI_QTYPE_SUPTYPES);		/* we support compressed bitmap */		nip->ni_flags = NI_SUPTYPE_FLAG_COMPRESS;		memcpy(nip->icmp6_ni_nonce, nonce,		    sizeof(nip->icmp6_ni_nonce));		*(u_int16_t *)nip->icmp6_ni_nonce = ntohs(seq);		cc = ICMP6_NIQLEN;		datalen = 0;	} else {		icp->icmp6_type = ICMP6_ECHO_REQUEST;		icp->icmp6_code = 0;		icp->icmp6_id = htons(ident);		icp->icmp6_seq = ntohs(seq);		if (timing) {			struct timeval tv;			struct tv32 *tv32;			(void)gettimeofday(&tv, NULL);			tv32 = (struct tv32 *)&outpack[ICMP6ECHOLEN];			tv32->tv32_sec = htonl(tv.tv_sec);			tv32->tv32_usec = htonl(tv.tv_usec);		}		cc = ICMP6ECHOLEN + datalen;	}#ifdef DIAGNOSTIC	if (pingerlen() != cc)		errx(1, "internal error; length mismatch");#endif	smsghdr.msg_name = (caddr_t)&dst;	smsghdr.msg_namelen = sizeof(dst);	memset(&iov, 0, sizeof(iov));	iov[0].iov_base = (caddr_t)outpack;	iov[0].iov_len = cc;	smsghdr.msg_iov = iov;	smsghdr.msg_iovlen = 1;	i = sendmsg(s, &smsghdr, 0);	if (i < 0 || i != cc)  {		if (i < 0)			warn("sendmsg");		(void)printf("ping6: wrote %s %d chars, ret=%d\n",		    hostname, cc, i);	}	if (!(options & F_QUIET) && options & F_FLOOD)		(void)write(STDOUT_FILENO, &DOT, 1);	return(0);}intmyechoreply(icp)	const struct icmp6_hdr *icp;{	if (ntohs(icp->icmp6_id) == ident)		return 1;	else		return 0;}intmynireply(nip)	const struct icmp6_nodeinfo *nip;{	if (memcmp(nip->icmp6_ni_nonce + sizeof(u_int16_t),	    nonce + sizeof(u_int16_t),	    sizeof(nonce) - sizeof(u_int16_t)) == 0)		return 1;	else		return 0;}char *dnsdecode(sp, ep, base, buf, bufsiz)	const u_char **sp;	const u_char *ep;	const u_char *base;	/*base for compressed name*/	u_char *buf;	size_t bufsiz;{	int i;	const u_char *cp;	char cresult[MAXDNAME + 1];	const u_char *comp;	int l;	cp = *sp;	*buf = '\0';	if (cp >= ep)		return NULL;	while (cp < ep) {		i = *cp;		if (i == 0 || cp != *sp) {			if (strlcat(buf, ".", bufsiz) >= bufsiz)				return NULL;	/*result overrun*/		}		if (i == 0)			break;		cp++;		if ((i & 0xc0) == 0xc0 && cp - base > (i & 0x3f)) {			/* DNS compression */			if (!base)				return NULL;			comp = base + (i & 0x3f);			if (dnsdecode(&comp, cp, base, cresult,			    sizeof(cresult)) == NULL)				return NULL;			if (strlcat(buf, cresult, bufsiz) >= bufsiz)				return NULL;	/*result overrun*/			break;		} else if ((i & 0x3f) == i) {			if (i > ep - cp)				return NULL;	/*source overrun*/			while (i-- > 0 && cp < ep) {				l = snprintf(cresult, sizeof(cresult),				    isprint(*cp) ? "%c" : "\\%03o", *cp & 0xff);				if (l >= sizeof(cresult) || l < 0)					return NULL;				if (strlcat(buf, cresult, bufsiz) >= bufsiz)					return NULL;	/*result overrun*/				cp++;			}		} else			return NULL;	/*invalid label*/	}	if (i != 0)		return NULL;	/*not terminated*/	cp++;	*sp = cp;	return buf;}/* * pr_pack -- *	Print out the packet, if it came from us.  This logic is necessary * because ALL readers of the ICMP socket get a copy of ALL ICMP packets * which arrive ('tis only fair).  This permits multiple copies of this * program to be run without having intermingled output (or statistics!). */voidpr_pack(buf, cc, mhdr)	u_char *buf;	int cc;	struct msghdr *mhdr;{#define safeputc(c)	printf((isprint((c)) ? "%c" : "\\%03o"), c)	struct icmp6_hdr *icp;	struct icmp6_nodeinfo *ni;	int i;	int hoplim;	struct sockaddr *from;	int fromlen;	u_char *cp = NULL, *dp, *end = buf + cc;	struct in6_pktinfo *pktinfo = NULL;	struct timeval tv, tp;	struct tv32 *tpp;	double triptime = 0;	int dupflag;	size_t off;	int oldfqdn;	u_int16_t seq;	char dnsname[MAXDNAME + 1];	(void)gettimeofday(&tv, NULL);	if (!mhdr || !mhdr->msg_name ||	    mhdr->msg_namelen != sizeof(struct sockaddr_in6) ||	    ((struct sockaddr *)mhdr->msg_name)->sa_family != AF_INET6) {		if (options & F_VERBOSE)			warnx("invalid peername");		return;	}	from = (struct sockaddr *)mhdr->msg_name;	fromlen = mhdr->msg_namelen;	if (cc < sizeof(struct icmp6_hdr)) {		if (options & F_VERBOSE)			warnx("packet too short (%d bytes) from %s", cc,			    pr_addr(from, fromlen));		return;	}	icp = (struct icmp6_hdr *)buf;	ni = (struct icmp6_nodeinfo *)buf;	off = 0;	if ((hoplim = get_hoplim(mhdr)) == -1) {		warnx("failed to get receiving hop limit");		return;	}	if ((pktinfo = get_rcvpktinfo(mhdr)) == NULL) {		warnx("failed to get receiving pakcet information");		return;	}	if (icp->icmp6_type == ICMP6_ECHO_REPLY && myechoreply(icp)) {		seq = ntohs(icp->icmp6_seq);		++nreceived;		if (timing) {			tpp = (struct tv32 *)(icp + 1);			tp.tv_sec = ntohl(tpp->tv32_sec);			tp.tv_usec = ntohl(tpp->tv32_usec);			tvsub(&tv, &tp);			triptime = ((double)tv.tv_sec) * 1000.0 +			    ((double)tv.tv_usec) / 1000.0;			tsum += triptime;#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__)			tsumsq += triptime * triptime;#endif			if (triptime < tmin)				tmin = triptime;			if (triptime > tmax)				tmax = triptime;		}		if (TST(seq % mx_dup_ck)) {			++nrepeats;			--nreceived;			dupflag = 1;		} else {			SET(seq % mx_dup_ck);			dupflag = 0;		}		if (options & F_QUIET)			return;		if (options & F_FLOOD)			(void)write(STDOUT_FILENO, &BSPACE, 1);		else {			(void)printf("%d bytes from %s, icmp_seq=%u", cc,			    pr_addr(from, fromlen), seq);			(void)printf(" hlim=%d", hoplim);			if ((options & F_VERBOSE) != 0) {				struct sockaddr_in6 dstsa;				memset(&dstsa, 0, sizeof(dstsa));				dstsa.sin6_family = AF_INET6;#ifdef SIN6_LEN				dstsa.sin6_len = sizeof(dstsa);#endif				dstsa.sin6_scope_id = pktinfo->ipi6_ifindex;				dstsa.sin6_addr = pktinfo->ipi6_addr;				(void)printf(" dst=%s",				    pr_addr((struct sockaddr *)&dstsa,				    sizeof(dstsa)));			}			if (timing)				(void)printf(" time=%g ms", triptime);			if (dupflag)				(void)printf("(DUP!)");			/* check the data */			cp = buf + off + ICMP6ECHOLEN + ICMP6ECHOTMLEN;			dp = outpack + ICMP6ECHOLEN + ICMP6ECHOTMLEN;			for (i = 8; cp < end; ++i, ++cp, ++dp) {				if (*cp != *dp) {					(void)printf("\nwrong data byte #%d should be 0x%x but was 0x%x", i, *dp, *cp);					break;				}			}		}	} else if (icp->icmp6_type == ICMP6_NI_REPLY && mynireply(ni)) {		seq = ntohs(*(u_int16_t *)ni->icmp6_ni_nonce);		++nreceived;		if (TST(seq % mx_dup_ck)) {			++nrepeats;			--nreceived;			dupflag = 1;		} else {			SET(seq % mx_dup_ck);			dupflag = 0;		}		if (options & F_QUIET)			return;		(void)printf("%d bytes from %s: ", cc, pr_addr(from, fromlen));		switch (ntohs(ni->ni_code)) {		case ICMP6_NI_SUCCESS:			break;		case ICMP6_NI_REFUSED:			printf("refused, type 0x%x", ntohs(ni->ni_type));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品1区2区3区| 国产一区二区精品在线观看| 国产欧美一区二区精品忘忧草| 91精品在线一区二区| 在线观看日韩高清av| 日韩一区二区麻豆国产| 欧美视频精品在线| 精品视频在线免费观看| 欧美人妇做爰xxxⅹ性高电影| 欧美私模裸体表演在线观看| 欧美美女一区二区三区| 欧美肥妇bbw| 精品欧美久久久| 国产欧美一区二区精品秋霞影院| 中文字幕欧美日韩一区| 成人免费在线视频观看| 亚洲国产精品尤物yw在线观看| 亚洲综合激情小说| 青青青伊人色综合久久| 国产综合色在线| 成年人网站91| 欧美午夜精品久久久久久超碰| 91精品国产一区二区| 26uuu国产在线精品一区二区| 国产色爱av资源综合区| 亚洲人成网站色在线观看| 亚洲成人综合视频| 国产永久精品大片wwwapp| 99久久久精品| 日韩免费高清av| 国产欧美一区二区三区鸳鸯浴| 洋洋成人永久网站入口| 日本欧美大码aⅴ在线播放| 高清不卡一二三区| 欧洲一区二区av| 久久久www免费人成精品| 亚洲免费观看视频| 韩国毛片一区二区三区| 91黄视频在线观看| 久久午夜老司机| 一区二区三区国产精品| 国产超碰在线一区| 欧美精品免费视频| 一区二区中文字幕在线| 美女www一区二区| 在线观看日产精品| 国产欧美一区二区三区鸳鸯浴| 日韩激情视频在线观看| 91尤物视频在线观看| 精品国产一区二区三区久久久蜜月| 最新国产成人在线观看| 国产精品一区二区三区四区| 欧美伦理电影网| 亚洲精品国产无套在线观| 国模冰冰炮一区二区| 欧美一区二区国产| 亚洲一二三区在线观看| 99热国产精品| 国产视频一区不卡| 经典三级一区二区| 日韩欧美国产成人一区二区| 亚洲福利视频一区二区| 在线视频你懂得一区| 中文字幕在线不卡视频| 福利一区二区在线| 久久久噜噜噜久久中文字幕色伊伊| 午夜不卡av免费| 欧美网站一区二区| 一区二区三区久久久| 色综合视频在线观看| 国产精品成人一区二区艾草 | 国产不卡视频一区| 精品88久久久久88久久久| 日本中文字幕一区二区有限公司| 欧洲精品在线观看| 亚洲午夜精品久久久久久久久| 在线区一区二视频| 亚洲激情成人在线| 91精品1区2区| 午夜精品在线看| 在线电影国产精品| 麻豆成人综合网| 精品国产露脸精彩对白| 国产乱码精品一区二区三区忘忧草| 日韩视频在线永久播放| 精久久久久久久久久久| 国产偷v国产偷v亚洲高清| caoporen国产精品视频| 亚洲综合一二区| 91精品国产综合久久香蕉麻豆| 日本午夜精品一区二区三区电影| 欧美一级日韩免费不卡| 国产一区在线看| 亚洲色欲色欲www在线观看| 欧美在线看片a免费观看| 午夜精品久久久久久久久久久 | 日韩三级免费观看| 国产酒店精品激情| 亚洲视频精选在线| 欧美精品久久久久久久多人混战| 美女精品自拍一二三四| 国产精品免费丝袜| 欧美日韩精品欧美日韩精品一 | 亚洲精品v日韩精品| 欧美美女bb生活片| 国产91清纯白嫩初高中在线观看| 中文字幕亚洲成人| 欧美一级高清片在线观看| 国产激情偷乱视频一区二区三区| 国产精品国产三级国产有无不卡| 欧美在线视频日韩| 精品制服美女丁香| 一二三四社区欧美黄| 26uuu国产在线精品一区二区| 日本韩国一区二区| 国产自产v一区二区三区c| 亚洲色欲色欲www| 精品国产人成亚洲区| 色综合色综合色综合| 精品一区二区三区日韩| 一区二区三区中文字幕| 欧美tickling网站挠脚心| 色老头久久综合| 国产91对白在线观看九色| 天堂蜜桃一区二区三区| 国产精品灌醉下药二区| 精品欧美乱码久久久久久| 欧美制服丝袜第一页| 岛国精品一区二区| 美女尤物国产一区| 午夜精品福利久久久| 亚洲欧美激情一区二区| 国产亚洲欧美在线| 欧美mv日韩mv| 91麻豆精品国产综合久久久久久| 一本在线高清不卡dvd| 高清成人在线观看| 国产盗摄女厕一区二区三区 | 激情综合色综合久久综合| 一区二区三区美女视频| 日韩美女视频一区| 国产精品久久久久久久久搜平片 | 欧美成人免费网站| 欧美精品乱码久久久久久| 在线免费不卡视频| 在线观看av一区二区| 色综合久久中文字幕综合网| 99视频在线精品| 99久久夜色精品国产网站| 国产成人精品一区二| 国产成人精品一区二| 国产成人精品亚洲午夜麻豆| 国产一区二区三区黄视频| 狠狠色2019综合网| 国内精品久久久久影院一蜜桃| 久久成人18免费观看| 免费欧美高清视频| 久久超碰97中文字幕| 麻豆精品精品国产自在97香蕉| 蜜桃av一区二区三区电影| 久久精品国产精品亚洲精品| 九九九精品视频| 国产激情精品久久久第一区二区| 国产丶欧美丶日本不卡视频| 成人一区二区三区中文字幕| 99精品桃花视频在线观看| 色综合久久久久综合体桃花网| 色婷婷综合在线| 欧美酷刑日本凌虐凌虐| 日韩一本二本av| 国产日韩欧美高清| 日韩毛片一二三区| 亚洲成a人片在线不卡一二三区| 婷婷综合久久一区二区三区| 老汉av免费一区二区三区| 韩国v欧美v亚洲v日本v| 成人精品高清在线| 色欧美片视频在线观看| 91精品国产免费| 国产视频一区在线观看 | 6080yy午夜一二三区久久| 日韩欧美一区二区免费| 国产欧美一区二区精品忘忧草| 亚洲视频免费在线| 蜜乳av一区二区三区| 91亚洲精品久久久蜜桃网站| 欧美色图免费看| 久久精品亚洲精品国产欧美| 亚洲精品欧美激情| 狠狠色2019综合网| 在线看不卡av| 国产日韩精品一区| 亚洲一区二区av在线| 国内成人自拍视频| 欧美在线观看18| 欧美高清在线一区二区| 亚洲狠狠爱一区二区三区| 成人性生交大片免费看中文| 777a∨成人精品桃花网| 自拍偷拍国产精品|