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

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

?? getaddrinfo.c

?? 數據鏈路層的數據截取,主要用于各種型號網卡數據流的獲取
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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. *//* * "#ifdef FAITH" part is local hack for supporting IPv4-v6 translator. * * Issues to be discussed: * - Thread safe-ness must be checked. * - Return values.  There are nonstandard return values defined and used *   in the source code.  This is because RFC2553 is silent about which error *   code must be returned for which situation. * Note: * - We use getipnodebyname() just for thread-safeness.  There's no intent *   to let it do PF_UNSPEC (actually we never pass PF_UNSPEC to *   getipnodebyname(). * - The code filters out AFs that are not supported by the kernel, *   when globbing NULL hostname (to loopback, or wildcard).  Is it the right *   thing to do?  What is the relationship with post-RFC2553 AI_ADDRCONFIG *   in ai_flags? */#ifdef HAVE_CONFIG_H#include <config.h>#endif #ifndef lintstatic const char rcsid[] _U_ =     "@(#) $Header: /tcpdump/master/libpcap/Win32/Src/getaddrinfo.c,v 1.2 2003/11/15 23:24:06 guy Exp $";#endif#include <pcap-stdinc.h>#if 0#include <sys/sysctl.h>#endif#ifndef __MINGW32__#include <arpa/nameser.h>#endif#include <string.h>#include <stdlib.h>#include <stddef.h>#include <ctype.h>#include <stdio.h>#include <errno.h>#ifndef HAVE_PORTABLE_PROTOTYPE#include "cdecl_ext.h"#endif #ifndef HAVE_U_INT32_T#include "bittypes.h"#endif #ifndef HAVE_SOCKADDR_STORAGE#ifndef __MINGW32__#include "sockstorage.h"#endif#endif #ifdef NEED_ADDRINFO_H#include "addrinfo.h"#ifdef WIN32#include "IP6_misc.h"#endif#endif#if defined(__KAME__) && defined(INET6)# define FAITH#endif#define SUCCESS 0#define ANY 0#define YES 1#define NO  0#ifdef FAITHstatic int translate = NO;static struct in6_addr faith_prefix = IN6ADDR_ANY_INIT;#endifstatic const char in_addrany[] = { 0, 0, 0, 0 };static const char in6_addrany[] = {	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};static const char in_loopback[] = { 127, 0, 0, 1 }; static const char in6_loopback[] = {	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};struct sockinet {	u_char	si_len;	u_char	si_family;	u_short	si_port;	u_int32_t si_scope_id;};static const struct afd {	int a_af;	int a_addrlen;	int a_socklen;	int a_off;	const char *a_addrany;	const char *a_loopback;		int a_scoped;} afdl [] = {#ifdef INET6	{PF_INET6, sizeof(struct in6_addr),	 sizeof(struct sockaddr_in6),	 offsetof(struct sockaddr_in6, sin6_addr),	 in6_addrany, in6_loopback, 1},#endif	{PF_INET, sizeof(struct in_addr),	 sizeof(struct sockaddr_in),	 offsetof(struct sockaddr_in, sin_addr),	 in_addrany, in_loopback, 0},	{0, 0, 0, 0, NULL, NULL, 0},};struct explore {	int e_af;	int e_socktype;	int e_protocol;	const char *e_protostr;	int e_wild;#define WILD_AF(ex)		((ex)->e_wild & 0x01)#define WILD_SOCKTYPE(ex)	((ex)->e_wild & 0x02)#define WILD_PROTOCOL(ex)	((ex)->e_wild & 0x04)};static const struct explore explore[] = {#if 0	{ PF_LOCAL, 0, ANY, ANY, NULL, 0x01 },#endif#ifdef INET6	{ PF_INET6, SOCK_DGRAM, IPPROTO_UDP, "udp", 0x07 },	{ PF_INET6, SOCK_STREAM, IPPROTO_TCP, "tcp", 0x07 },	{ PF_INET6, SOCK_RAW, ANY, NULL, 0x05 },#endif	{ PF_INET, SOCK_DGRAM, IPPROTO_UDP, "udp", 0x07 },	{ PF_INET, SOCK_STREAM, IPPROTO_TCP, "tcp", 0x07 },	{ PF_INET, SOCK_RAW, ANY, NULL, 0x05 },	{ -1, 0, 0, NULL, 0 },};#ifdef INET6#define PTON_MAX	16#else#define PTON_MAX	4#endifstatic int str_isnumber __P((const char *));static int explore_fqdn __P((const struct addrinfo *, const char *,	const char *, struct addrinfo **));static int explore_null __P((const struct addrinfo *, const char *,	const char *, struct addrinfo **));static int explore_numeric __P((const struct addrinfo *, const char *,	const char *, struct addrinfo **));static int explore_numeric_scope __P((const struct addrinfo *, const char *,	const char *, struct addrinfo **));static int get_name __P((const char *, const struct afd *, struct addrinfo **,	char *, const struct addrinfo *, const char *));static int get_canonname __P((const struct addrinfo *,	struct addrinfo *, const char *));static struct addrinfo *get_ai __P((const struct addrinfo *,	const struct afd *, const char *));static int get_portmatch __P((const struct addrinfo *, const char *));static int get_port __P((struct addrinfo *, const char *, int));static const struct afd *find_afd __P((int));static char *ai_errlist[] = {	"Success",	"Address family for hostname not supported",	/* EAI_ADDRFAMILY */	"Temporary failure in name resolution",		/* EAI_AGAIN      */	"Invalid value for ai_flags",		       	/* EAI_BADFLAGS   */	"Non-recoverable failure in name resolution", 	/* EAI_FAIL       */	"ai_family not supported",			/* EAI_FAMILY     */	"Memory allocation failure", 			/* EAI_MEMORY     */	"No address associated with hostname", 		/* EAI_NODATA     */	"hostname nor servname provided, or not known",	/* EAI_NONAME     */	"servname not supported for ai_socktype",	/* EAI_SERVICE    */	"ai_socktype not supported", 			/* EAI_SOCKTYPE   */	"System error returned in errno", 		/* EAI_SYSTEM     */	"Invalid value for hints",			/* EAI_BADHINTS	  */	"Resolved protocol is unknown",			/* EAI_PROTOCOL   */	"Unknown error", 				/* EAI_MAX        */};/* XXX macros that make external reference is BAD. */#define GET_AI(ai, afd, addr) \do { \	/* external reference: pai, error, and label free */ \	(ai) = get_ai(pai, (afd), (addr)); \	if ((ai) == NULL) { \		error = EAI_MEMORY; \		goto free; \	} \} while (0)#define GET_PORT(ai, serv) \do { \	/* external reference: error and label free */ \	error = get_port((ai), (serv), 0); \	if (error != 0) \		goto free; \} while (0)#define GET_CANONNAME(ai, str) \do { \	/* external reference: pai, error and label free */ \	error = get_canonname(pai, (ai), (str)); \	if (error != 0) \		goto free; \} while (0)#define ERR(err) \do { \	/* external reference: error, and label bad */ \	error = (err); \	goto bad; \} while (0)#define MATCH_FAMILY(x, y, w) \	((x) == (y) || ((w) && ((x) == PF_UNSPEC || (y) == PF_UNSPEC)))#define MATCH(x, y, w) \	((x) == (y) || ((w) && ((x) == ANY || (y) == ANY)))char *gai_strerror(ecode)	int ecode;{	if (ecode < 0 || ecode > EAI_MAX)		ecode = EAI_MAX;	return ai_errlist[ecode];}voidfreeaddrinfo(ai)	struct addrinfo *ai;{	struct addrinfo *next;	do {		next = ai->ai_next;		if (ai->ai_canonname)			free(ai->ai_canonname);		/* no need to free(ai->ai_addr) */		free(ai);	} while ((ai = next) != NULL);}static intstr_isnumber(p)	const char *p;{	char *q = (char *)p;	while (*q) {		if (! isdigit(*q))			return NO;		q++;	}	return YES;}intgetaddrinfo(hostname, servname, hints, res)	const char *hostname, *servname;	const struct addrinfo *hints;	struct addrinfo **res;{	struct addrinfo sentinel;	struct addrinfo *cur;	int error = 0;	struct addrinfo ai;	struct addrinfo ai0;	struct addrinfo *pai;	const struct afd *afd;	const struct explore *ex;#ifdef FAITH	static int firsttime = 1;	if (firsttime) {		/* translator hack */		char *q = getenv("GAI");		if (q && inet_pton(AF_INET6, q, &faith_prefix) == 1)			translate = YES;		firsttime = 0;	}#endif	sentinel.ai_next = NULL;	cur = &sentinel;	pai = &ai;	pai->ai_flags = 0;	pai->ai_family = PF_UNSPEC;	pai->ai_socktype = ANY;	pai->ai_protocol = ANY;	pai->ai_addrlen = 0;	pai->ai_canonname = NULL;	pai->ai_addr = NULL;	pai->ai_next = NULL;		if (hostname == NULL && servname == NULL)		return EAI_NONAME;	if (hints) {		/* error check for hints */		if (hints->ai_addrlen || hints->ai_canonname ||		    hints->ai_addr || hints->ai_next)			ERR(EAI_BADHINTS); /* xxx */		if (hints->ai_flags & ~AI_MASK)			ERR(EAI_BADFLAGS);		switch (hints->ai_family) {		case PF_UNSPEC:		case PF_INET:#ifdef INET6		case PF_INET6:#endif			break;		default:			ERR(EAI_FAMILY);		}		memcpy(pai, hints, sizeof(*pai));		/*		 * if both socktype/protocol are specified, check if they		 * are meaningful combination.		 */		if (pai->ai_socktype != ANY && pai->ai_protocol != ANY) {			for (ex = explore; ex->e_af >= 0; ex++) {				if (pai->ai_family != ex->e_af)					continue;				if (ex->e_socktype == ANY)					continue;				if (ex->e_protocol == ANY)					continue;				if (pai->ai_socktype == ex->e_socktype				 && pai->ai_protocol != ex->e_protocol) {					ERR(EAI_BADHINTS);				}			}		}	}	/*	 * check for special cases.  (1) numeric servname is disallowed if	 * socktype/protocol are left unspecified. (2) servname is disallowed	 * for raw and other inet{,6} sockets.	 */	if (MATCH_FAMILY(pai->ai_family, PF_INET, 1)#ifdef PF_INET6	 || MATCH_FAMILY(pai->ai_family, PF_INET6, 1)#endif	    ) {		ai0 = *pai;		if (pai->ai_family == PF_UNSPEC) {#ifdef PF_INET6			pai->ai_family = PF_INET6;#else			pai->ai_family = PF_INET;#endif		}		error = get_portmatch(pai, servname);		if (error)			ERR(error);		*pai = ai0;	}	ai0 = *pai;	/* NULL hostname, or numeric hostname */	for (ex = explore; ex->e_af >= 0; ex++) {		*pai = ai0;		if (!MATCH_FAMILY(pai->ai_family, ex->e_af, WILD_AF(ex)))			continue;		if (!MATCH(pai->ai_socktype, ex->e_socktype, WILD_SOCKTYPE(ex)))			continue;		if (!MATCH(pai->ai_protocol, ex->e_protocol, WILD_PROTOCOL(ex)))			continue;		if (pai->ai_family == PF_UNSPEC)			pai->ai_family = ex->e_af;		if (pai->ai_socktype == ANY && ex->e_socktype != ANY)			pai->ai_socktype = ex->e_socktype;		if (pai->ai_protocol == ANY && ex->e_protocol != ANY)			pai->ai_protocol = ex->e_protocol;		if (hostname == NULL)			error = explore_null(pai, hostname, servname, &cur->ai_next);		else			error = explore_numeric_scope(pai, hostname, servname, &cur->ai_next);		if (error)			goto free;		while (cur && cur->ai_next)			cur = cur->ai_next;	}	/*	 * XXX	 * If numreic representation of AF1 can be interpreted as FQDN	 * representation of AF2, we need to think again about the code below.	 */	if (sentinel.ai_next)		goto good;	if (pai->ai_flags & AI_NUMERICHOST)		ERR(EAI_NONAME);	if (hostname == NULL)		ERR(EAI_NONAME);	/*	 * hostname as alphabetical name.	 * we would like to prefer AF_INET6 than AF_INET, so we'll make a	 * outer loop by AFs.	 */	for (afd = afdl; afd->a_af; afd++) {		*pai = ai0;		if (!MATCH_FAMILY(pai->ai_family, afd->a_af, 1))			continue;		for (ex = explore; ex->e_af >= 0; ex++) {			*pai = ai0;			if (pai->ai_family == PF_UNSPEC)				pai->ai_family = afd->a_af;			if (!MATCH_FAMILY(pai->ai_family, ex->e_af, WILD_AF(ex)))				continue;			if (!MATCH(pai->ai_socktype, ex->e_socktype,					WILD_SOCKTYPE(ex))) {				continue;			}			if (!MATCH(pai->ai_protocol, ex->e_protocol,					WILD_PROTOCOL(ex))) {				continue;			}			if (pai->ai_family == PF_UNSPEC)				pai->ai_family = ex->e_af;			if (pai->ai_socktype == ANY && ex->e_socktype != ANY)				pai->ai_socktype = ex->e_socktype;			if (pai->ai_protocol == ANY && ex->e_protocol != ANY)				pai->ai_protocol = ex->e_protocol;			error = explore_fqdn(pai, hostname, servname,				&cur->ai_next);			while (cur && cur->ai_next)				cur = cur->ai_next;		}	}	/* XXX */	if (sentinel.ai_next)		error = 0;	if (error)		goto free;	if (error == 0) {		if (sentinel.ai_next) { good:			*res = sentinel.ai_next;			return SUCCESS;		} else			error = EAI_FAIL;	} free: bad:	if (sentinel.ai_next)		freeaddrinfo(sentinel.ai_next);	*res = NULL;	return error;}/* * FQDN hostname, DNS lookup */static intexplore_fqdn(pai, hostname, servname, res)	const struct addrinfo *pai;	const char *hostname;	const char *servname;	struct addrinfo **res;{	struct hostent *hp;	int h_error;	int af;	char **aplist = NULL, *apbuf = NULL;	char *ap;	struct addrinfo sentinel, *cur;	int i;#ifndef USE_GETIPNODEBY	int naddrs;#endif	const struct afd *afd;	int error;	*res = NULL;	sentinel.ai_next = NULL;	cur = &sentinel;	/*	 * Do not filter unsupported AFs here.  We need to honor content of	 * databases (/etc/hosts, DNS and others).  Otherwise we cannot	 * replace gethostbyname() by getaddrinfo().	 */	/*	 * if the servname does not match socktype/protocol, ignore it.	 */	if (get_portmatch(pai, servname) != 0)		return 0;	afd = find_afd(pai->ai_family);	/*	 * post-RFC2553: should look at (pai->ai_flags & AI_ADDRCONFIG)	 * rather than hardcoding it.  we may need to add AI_ADDRCONFIG	 * handling code by ourselves in case we don't have getipnodebyname().	 */#ifdef USE_GETIPNODEBY	hp = getipnodebyname(hostname, pai->ai_family, AI_ADDRCONFIG, &h_error);#else#ifdef HAVE_GETHOSTBYNAME2	hp = gethostbyname2(hostname, pai->ai_family);#else	if (pai->ai_family != AF_INET)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美偷拍三级| 欧美一二区视频| 日本久久电影网| 在线免费观看一区| 欧美自拍偷拍午夜视频| 在线观看亚洲专区| 国产99一区视频免费| 国产成人综合亚洲91猫咪| 国产精品综合二区| 成人午夜视频网站| 日韩国产在线一| 蜜桃视频在线观看一区| 国模无码大尺度一区二区三区| 国产一本一道久久香蕉| 国产精品996| 91久久一区二区| 国产精品福利一区| 亚洲国产日韩一级| 国产精品久久一卡二卡| 日韩在线观看一区二区| 91免费国产在线| 久久久另类综合| 国模一区二区三区白浆| 欧美久久久久久蜜桃| 亚洲综合免费观看高清在线观看| 国产成人亚洲综合a∨猫咪| 精品1区2区在线观看| 天堂va蜜桃一区二区三区漫画版| 欧日韩精品视频| 亚洲6080在线| 欧美一个色资源| 奇米四色…亚洲| 久久亚洲二区三区| 国产成人午夜精品5599| 国产欧美一区二区精品婷婷| 久久国产精品99精品国产| 欧美一区二区久久久| 蜜臀精品一区二区三区在线观看 | 日韩欧美国产电影| 日本不卡视频一二三区| 欧美一区二区三区白人| 麻豆精品在线播放| 中国色在线观看另类| 95精品视频在线| 午夜精品福利一区二区三区av| 欧美美女喷水视频| 国产一区二区免费看| 亚洲欧洲日韩综合一区二区| 欧美日韩aaa| 国产成人午夜电影网| 午夜视频在线观看一区| 精品999在线播放| 在线观看欧美精品| 蜜臀av一区二区三区| 亚洲欧洲制服丝袜| 日韩欧美成人午夜| 色综合咪咪久久| 加勒比av一区二区| 亚洲国产欧美日韩另类综合| 久久综合成人精品亚洲另类欧美 | 成人激情午夜影院| 日韩精品色哟哟| 亚洲精品菠萝久久久久久久| 精品人伦一区二区色婷婷| 欧美日本韩国一区二区三区视频 | 亚洲一区二区影院| 中文字幕第一区综合| 精品久久人人做人人爰| 欧美日韩一区视频| 欧美天天综合网| 91丨porny丨蝌蚪视频| 国产尤物一区二区在线| 日日夜夜免费精品视频| 亚洲成在人线在线播放| 亚洲综合视频在线观看| 夜夜嗨av一区二区三区中文字幕| 亚洲国产精品激情在线观看| 国产欧美日韩不卡免费| 亚洲国产精品av| 国产精品美女久久久久久| 国产人妖乱国产精品人妖| 国产精品久久久久一区二区三区 | 欧美日韩一区精品| 欧美久久一二三四区| 欧美mv日韩mv亚洲| 久久久99精品久久| 中文字幕成人av| 亚洲宅男天堂在线观看无病毒| 欧美激情在线一区二区| 欧美国产精品v| 一区二区三区久久久| 日日摸夜夜添夜夜添国产精品| 美女网站在线免费欧美精品| 国产一区二区三区黄视频 | 26uuu国产电影一区二区| 久久久久久久久一| 一区二区三区自拍| 老司机免费视频一区二区三区| 成人国产在线观看| 欧美电影一区二区三区| 国产精品乱码一区二三区小蝌蚪| 一个色妞综合视频在线观看| 国内精品国产成人国产三级粉色| 91美女片黄在线观看| 日韩视频免费观看高清完整版 | 日韩av一级片| 99国产麻豆精品| 26uuu久久综合| 亚欧色一区w666天堂| 99国产麻豆精品| 亚洲国产成人自拍| 国产一区二区三区不卡在线观看| 欧美精品久久一区二区三区| 亚洲乱码国产乱码精品精可以看| 韩国成人福利片在线播放| 欧美日韩国产精选| 亚洲在线免费播放| 99久久er热在这里只有精品15| 国产女人18水真多18精品一级做 | 久久精品日韩一区二区三区| 亚洲va欧美va人人爽| 在线免费观看成人短视频| 亚洲蜜臀av乱码久久精品| 99久久伊人精品| 中文字幕在线播放不卡一区| 亚洲欧美一区二区三区国产精品| 国内外精品视频| 欧美夫妻性生活| 秋霞国产午夜精品免费视频| 91精品国产综合久久久蜜臀图片| 日日嗨av一区二区三区四区| 91精品国产色综合久久不卡电影 | 亚洲三级电影全部在线观看高清| 成人a免费在线看| 亚洲高清免费在线| 欧美老肥妇做.爰bbww视频| 蜜臀精品一区二区三区在线观看| 久久综合久色欧美综合狠狠| 成a人片亚洲日本久久| 亚洲美女一区二区三区| 欧美日韩一级视频| 国产精品性做久久久久久| 国产精品国产馆在线真实露脸 | 天堂va蜜桃一区二区三区 | 国产一区三区三区| 专区另类欧美日韩| 欧美一卡二卡三卡| 97se亚洲国产综合自在线不卡| 日韩黄色小视频| 亚洲欧洲无码一区二区三区| 欧美成人福利视频| 在线精品视频一区二区三四| 国产精品自拍av| 日本女人一区二区三区| 亚洲另类色综合网站| 久久综合狠狠综合久久激情| 欧美影视一区在线| 成人免费的视频| 黄色日韩三级电影| 日韩黄色一级片| 日韩电影免费一区| 亚洲国产美国国产综合一区二区| 国产精品每日更新| 欧美精品一区视频| 精品国产一区久久| 日韩精品一区二区三区蜜臀 | 91亚洲永久精品| 91美女视频网站| 91在线看国产| 色综合久久66| 一本大道久久a久久综合| 在线精品亚洲一区二区不卡| 欧洲色大大久久| 欧美伦理电影网| 日韩色视频在线观看| 精品少妇一区二区三区| 精品久久久久久最新网址| 精品sm捆绑视频| 五月天网站亚洲| 日韩国产欧美三级| 美腿丝袜亚洲一区| 国产一区二区三区四区在线观看| 成人性生交大片免费看中文| 波多野洁衣一区| 欧美嫩在线观看| 欧美经典一区二区| 亚洲伦理在线免费看| 日本视频免费一区| 国产福利一区二区三区视频在线 | 色婷婷亚洲一区二区三区| 欧美理论在线播放| 日本一区二区动态图| 亚洲a一区二区| 国产超碰在线一区| 欧美精品久久天天躁| 中文字幕在线不卡一区| 精品中文字幕一区二区小辣椒| 91免费视频网| 国产欧美日韩一区二区三区在线观看| 亚洲精品国产精品乱码不99|