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

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

?? resolv.c

?? 一個tcp/ip協議棧,帶有PPP、IP、TCP、UDP等協議
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* resolv.c: DNS Resolver * * Copyright (C) 1998  Kenneth Albanowski <kjahds@kjahds.com>, *                     The Silver Hammer Group, Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * *  5-Oct-2000 W. Greathouse  wgreathouse@smva.com *                              Fix memory leak and memory corruption. *                              -- Every name resolution resulted in *                                 a new parse of resolv.conf and new *                                 copy of nameservers allocated by *                                 strdup. *                              -- Every name resolution resulted in *                                 a new read of resolv.conf without *                                 resetting index from prior read... *                                 resulting in exceeding array bounds. * *                              Limit nameservers read from resolv.conf * *                              Add "search" domains from resolv.conf * *                              Some systems will return a security *                              signature along with query answer for *                              dynamic DNS entries. *                              -- skip/ignore this answer * *                              Include arpa/nameser.h for defines. * *                              General cleanup * 6-2-2001 Craig Graham *          - Ported to ISS OS *          - Added better answer search algorithm *          - Added support for static builtin name server list *          - Added defines to use the uC/IP UDP API directly instead of going via the *            (slightly slower) generic socket API. *          - Added uC/IP style timeouts on waiting for a response (ISS OS doesn't support signals) */#define USE_UCIP_DIRECT 1#include <config.h>#include <string.h>#include <stdio.h>#include <errno.h>#include <sys/socket.h>#if (USE_UCIP_DIRECT==0)#include <signal.h>#include <sys/types.h>#include <netinet/in.h>#include <arpa/inet.h>#endif#include "netconf.h"#include "net.h"#include "netbuf.h"#include "netip.h"//#include "net_adl.h"#include "nettimer.h"#include "netudp.h"#include <stdlib.h>#include <unistd.h>//#include <cfgfile.h>#include "resolv.h"#include "nameser.h"#include <stdarg.h>#ifdef ISS_OS#include <adl.h>#include <adl_ls808.h>#else#define UNCACHED(X) (X)#endif#define MAX_RECURSE 5#define REPLY_TIMEOUT 10#define MAX_RETRIES 15#define MAX_SERVERS 3#define MAX_SEARCH 4#define L_encodeh#define L_decodeh#define L_encoded#define L_decoded#define L_lengthd#define L_encodeq#define L_decodeq#define L_lengthq#define L_encodea#define L_decodea#define L_encodep#define L_decodep#define L_formquery#define L_dnslookup#define L_resolveaddress#define L_resolvemailbox#define L_opennameservers#define L_closenameservers#define L_resolvename#define L_gethostbyname//#define L_gethostbyaddr#if 0#define RESOLVDEBUG(A) printf A#else#define RESOLVDEBUG(A)#endif/** * Switch. * 0=use /etc/resolv.conf for nameserver list, * 1=static nameserver list */#define USE_RESOLV_CONF 0#ifdef L_encodehint encode_header(struct resolv_header *h, unsigned char *dest, int maxlen){        if (maxlen < HFIXEDSZ)                return -1;        dest[0] = (h->id & 0xff00) >> 8;        dest[1] = (h->id & 0x00ff) >> 0;        dest[2] = (h->qr ? 0x80 : 0) |                ((h->opcode & 0x0f) << 3) |                (h->aa ? 0x04 : 0) | (h->tc ? 0x02 : 0) | (h->rd ? 0x01 : 0);        dest[3] = (h->ra ? 0x80 : 0) | (h->rcode & 0x0f);        dest[4] = (h->qdcount & 0xff00) >> 8;        dest[5] = (h->qdcount & 0x00ff) >> 0;        dest[6] = (h->ancount & 0xff00) >> 8;        dest[7] = (h->ancount & 0x00ff) >> 0;        dest[8] = (h->nscount & 0xff00) >> 8;        dest[9] = (h->nscount & 0x00ff) >> 0;        dest[10] = (h->arcount & 0xff00) >> 8;        dest[11] = (h->arcount & 0x00ff) >> 0;        return HFIXEDSZ;}#endif#ifdef L_decodehint decode_header(unsigned char *data, struct resolv_header *h){        h->id = (data[0] << 8) | data[1];        h->qr = (data[2] & 0x80) ? 1 : 0;        h->opcode = (data[2] >> 3) & 0x0f;        h->aa = (data[2] & 0x04) ? 1 : 0;        h->tc = (data[2] & 0x02) ? 1 : 0;        h->rd = (data[2] & 0x01) ? 1 : 0;        h->ra = (data[3] & 0x80) ? 1 : 0;        h->rcode = data[3] & 0x0f;        h->qdcount = (data[4] << 8) | data[5];        h->ancount = (data[6] << 8) | data[7];        h->nscount = (data[8] << 8) | data[9];        h->arcount = (data[10] << 8) | data[11];        return HFIXEDSZ;}#endif#ifdef L_encoded/* Encode a dotted string into nameserver transport-level encoding.   This routine is fairly dumb, and doesn't attempt to compress   the data */int encode_dotted(const char *dotted, unsigned char *dest, int maxlen){        int used = 0;        while (dotted && *dotted) {                char *c = strchr(dotted, '.');                int l = c ? c - dotted : strlen(dotted);                if (l >= (maxlen - used - 1))                        return -1;                dest[used++] = l;                memcpy(dest + used, dotted, l);                used += l;                if (c)                        dotted = c + 1;                else                        break;        }        if (maxlen < 1)                return -1;        dest[used++] = 0;        return used;}#endif#ifdef L_decoded/* Decode a dotted string from nameserver transport-level encoding.   This routine understands compressed data. */int decode_dotted(const unsigned char *data, int offset,                                  char *dest, int maxlen){        int l;        int measure = 1;        int total = 0;        int used = 0;        if (!data)                return -1;        while ((l = data[offset++])) {                if (measure && total++)                        break;                if ((l & 0xc0) == (0xc0)) {                        if (measure)                                total++;                        /* compressed item, redirect */                        offset = ((l & 0x3f) << 8) | data[offset];                        measure = 0;                        continue;                }                if ((used + l + 1) >= maxlen)                        return -1;                memcpy(dest + used, data + offset, l);                offset += l;                used += l;                if (measure)                        total += l;                if (data[offset] != 0)                        dest[used++] = '.';                else                        dest[used++] = '\0';        }        RESOLVDEBUG(("Total decode len = %d\n", total));        return total;}#endif#ifdef L_lengthdint length_dotted(const unsigned char *data, int offset){        int orig_offset = offset;        int l;        if (!data)                return -1;        while ((l = data[offset++])) {                if ((l & 0xc0) == (0xc0)) {                        offset++;                        break;                }                offset += l;        }        return offset - orig_offset;}#endif#ifdef L_encodeqint encode_question(struct resolv_question *q,                                        unsigned char *dest, int maxlen){        int i;        i = encode_dotted(q->dotted, dest, maxlen);        if (i < 0)                return i;        dest += i;        maxlen -= i;        if (maxlen < 4)                return -1;        dest[0] = (q->qtype & 0xff00) >> 8;        dest[1] = (q->qtype & 0x00ff) >> 0;        dest[2] = (q->qclass & 0xff00) >> 8;        dest[3] = (q->qclass & 0x00ff) >> 0;        return i + 4;}#endif#ifdef L_decodeqint decode_question(unsigned char *message, int offset,                                        struct resolv_question *q){        char temp[256];        int i;        i = decode_dotted(message, offset, temp, sizeof(temp));        if (i < 0)                return i;        offset += i;        q->dotted = strdup(temp);        q->qtype = (message[offset + 0] << 8) | message[offset + 1];        q->qclass = (message[offset + 2] << 8) | message[offset + 3];        return i + 4;}#endif#ifdef L_lengthqint length_question(unsigned char *message, int offset){        int i;        i = length_dotted(message, offset);        if (i < 0)                return i;        return i + 4;}#endif#ifdef L_encodeaint encode_answer(struct resolv_answer *a, unsigned char *dest, int maxlen){        int i;        i = encode_dotted(a->dotted, dest, maxlen);        if (i < 0)                return i;        dest += i;        maxlen -= i;        if (maxlen < (RRFIXEDSZ+a->rdlength))                return -1;        *dest++ = (a->atype & 0xff00) >> 8;        *dest++ = (a->atype & 0x00ff) >> 0;        *dest++ = (a->aclass & 0xff00) >> 8;        *dest++ = (a->aclass & 0x00ff) >> 0;        *dest++ = (a->ttl & 0xff000000) >> 24;        *dest++ = (a->ttl & 0x00ff0000) >> 16;        *dest++ = (a->ttl & 0x0000ff00) >> 8;        *dest++ = (a->ttl & 0x000000ff) >> 0;        *dest++ = (a->rdlength & 0xff00) >> 8;        *dest++ = (a->rdlength & 0x00ff) >> 0;        memcpy(dest, a->rdata, a->rdlength);        return i + RRFIXEDSZ + a->rdlength;}#endif#ifdef L_decodeaint decode_answer(unsigned char *message, int offset,                                  struct resolv_answer *a){        char temp[256];        int i;        i = decode_dotted(message, offset, temp, sizeof(temp));        if (i < 0)                return i;        message += offset + i;        a->dotted = strdup(temp);				printf("a->dotted=%p\n",a->dotted);        a->atype = (message[0] << 8) | message[1];        message += 2;        a->aclass = (message[0] << 8) | message[1];        message += 2;        a->ttl = (message[0] << 24) |                (message[1] << 16) | (message[2] << 8) | (message[3] << 0);        message += 4;        a->rdlength = (message[0] << 8) | message[1];        message += 2;        a->rdata = message;        a->rdoffset = offset + i + RRFIXEDSZ;        RESOLVDEBUG(("i=%d,rdlength=%d\n", i, a->rdlength));        return i + RRFIXEDSZ + a->rdlength;}#endif#ifdef L_encodepint encode_packet(struct resolv_header *h,                                  struct resolv_question **q,                                  struct resolv_answer **an,                                  struct resolv_answer **ns,                                  struct resolv_answer **ar,                                  unsigned char *dest, int maxlen){        int i, total = 0;        int j;        i = encode_header(h, dest, maxlen);        if (i < 0)                return i;        dest += i;        maxlen -= i;        total += i;        for (j = 0; j < h->qdcount; j++) {                i = encode_question(q[j], dest, maxlen);                if (i < 0)                        return i;                dest += i;                maxlen -= i;                total += i;        }        for (j = 0; j < h->ancount; j++) {                i = encode_answer(an[j], dest, maxlen);                if (i < 0)                        return i;                dest += i;                maxlen -= i;                total += i;        }        for (j = 0; j < h->nscount; j++) {                i = encode_answer(ns[j], dest, maxlen);                if (i < 0)                        return i;                dest += i;                maxlen -= i;                total += i;        }        for (j = 0; j < h->arcount; j++) {                i = encode_answer(ar[j], dest, maxlen);                if (i < 0)                        return i;                dest += i;                maxlen -= i;                total += i;        }        return total;}#endif#ifdef L_decodepint decode_packet(unsigned char *data, struct resolv_header *h){        return decode_header(data, h);}#endif#ifdef L_formqueryint form_query(int id, const char *name, int type, unsigned char *packet,                           int maxlen){        struct resolv_header h;        struct resolv_question q;        int i, j;        memset(&h, 0, sizeof(h));        h.id = id;        h.qdcount = 1;        q.dotted = (char *) name;        q.qtype = type;        q.qclass = C_IN; /* CLASS_IN */        i = encode_header(&h, packet, maxlen);        if (i < 0)                return i;        j = encode_question(&q, packet + i, maxlen - i);        if (j < 0)                return j;        return i + j;}#endif#ifdef L_dnslookupstatic volatile int dns_caught_signal = 0;#if USE_UCIP_DIRECTextern void unblock(int sockfd);static void dns_timeout(void *p){	dns_caught_signal = 1;	udpUnblockRead((int)p);}#elsevoid dns_catch_signal(int signo){        dns_caught_signal = 1;}#endifint dns_lookup(const char *name, int type, int nscount, char **nsip,                           unsigned char **outpacket, struct resolv_answer *a){	static int id = 1;	int i, j, len, fd, pos;	static int ns = 0;	struct sockaddr_in sa;#if (USE_UCIP_DIRECT==0)	int oldalarm;	__sighandler_t oldhandler;#endif	struct resolv_header h;	struct resolv_question q;	int retries = 0;	unsigned char * packet = malloc(PACKETSZ);	unsigned char * lookup = malloc(MAXDNAME);	int variant = 0;	extern int searchdomains;	extern const char * searchdomain[MAX_SEARCH];	struct resolv_answer tmpA;	fd = -1;	if (!packet || !lookup || !nscount)		goto fail;	RESOLVDEBUG(("Looking up type %d answer for '%s'\n", type, name));	ns %= nscount;	a->atype=0;	while (retries++ < MAX_RETRIES)	{		if (fd != -1)#if USE_UCIP_DIRECT			udpClose(fd);#else			close(fd);#endif#if USE_UCIP_DIRECT		fd=udpOpen();#else		fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);#endif		if (fd == -1)			goto fail;		memset(packet, 0, PACKETSZ);		memset(&h, 0, sizeof(h));		h.id = ++id;		h.qdcount = 1;		h.rd = 1;		RESOLVDEBUG(("encoding header\n", h.rd));		i = encode_header(&h, packet, PACKETSZ);		if (i < 0)			goto fail;		strncpy(lookup,name,MAXDNAME);		if (variant < searchdomains)		{			strncat(lookup,".", MAXDNAME);			strncat(lookup,searchdomain[variant], MAXDNAME);		}		RESOLVDEBUG(("lookup name: %s\n", lookup));		q.dotted = (char *)lookup;		q.qtype = type;		q.qclass = C_IN; /* CLASS_IN */		j = encode_question(&q, packet+i, PACKETSZ-i);		if (j < 0)			goto fail;		len = i + j;		RESOLVDEBUG(("On try %d, sending query to port %d of machine %s\n",										retries, NAMESERVER_PORT, nsip[ns]));		sa.sin_family = AF_INET;		sa.sin_port = htons(NAMESERVER_PORT);		sa.sin_addr.s_addr = inet_addr(nsip[ns]);#if USE_UCIP_DIRECT		if (udpConnect(fd, UNCACHED(&sa), 0) == -1)#else		if (connect(fd, (struct sockaddr *) &sa, sizeof(sa)) == -1)#endif		{			if (errno == ENETUNREACH)			{				/* routing error, presume not transient */				goto tryall;			} else{				/* retry */				continue;			}		}		RESOLVDEBUG(("Transmitting packet of length %d, id=%d, qr=%d\n",										len, h.id, h.qr));#if USE_UCIP_DIRECT		udpWrite(fd,UNCACHED(packet),len);#else		write(fd, packet, len);#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人精品一区| 久久这里都是精品| 亚洲日本中文字幕区| 国产成人av资源| 欧美激情自拍偷拍| 成人国产精品免费网站| 中文字幕一区av| 91麻豆自制传媒国产之光| 亚洲色图视频网| 在线观看日韩毛片| 奇米影视7777精品一区二区| 日韩天堂在线观看| 国产精品 日产精品 欧美精品| 久久久久久麻豆| 99re亚洲国产精品| 亚洲国产精品一区二区尤物区| 91麻豆精品国产自产在线观看一区| 日韩va欧美va亚洲va久久| 久久天天做天天爱综合色| 国产aⅴ综合色| 亚洲九九爱视频| 538prom精品视频线放| 国产一区二区三区日韩| 18成人在线视频| 欧美精品自拍偷拍| 国产精品123| 性欧美大战久久久久久久久| 精品国精品自拍自在线| 成人免费视频视频在线观看免费| 一区二区三区四区蜜桃 | 国产精品亚洲专一区二区三区| 2020国产精品| 在线观看日韩一区| 国产露脸91国语对白| 一级精品视频在线观看宜春院 | 久久看人人爽人人| 96av麻豆蜜桃一区二区| 日本大胆欧美人术艺术动态| 国产精品三级久久久久三级| 欧美日本一区二区在线观看| 国产成人免费视频网站| 午夜精品久久久久久不卡8050| 久久精品免费在线观看| 欧美日精品一区视频| 粉嫩av亚洲一区二区图片| 日日夜夜精品视频天天综合网| 国产人妖乱国产精品人妖| 4438亚洲最大| 色哟哟亚洲精品| 国产成a人无v码亚洲福利| 日日夜夜精品免费视频| 亚洲色图在线看| 国产亚洲一区二区三区在线观看| 91精品国产综合久久久久久漫画| 97久久精品人人做人人爽| 国模冰冰炮一区二区| 日韩成人av影视| 一卡二卡三卡日韩欧美| 中文字幕一区二区在线观看| 欧美tickle裸体挠脚心vk| 欧美性色aⅴ视频一区日韩精品| 高清成人在线观看| 久久国产人妖系列| 日韩成人免费在线| 午夜伊人狠狠久久| 亚洲成人黄色小说| 亚洲在线中文字幕| 亚洲一区在线电影| 亚洲免费观看高清在线观看| 国产精品国产三级国产a| 国产三级欧美三级日产三级99| 精品欧美一区二区在线观看| 91精品免费在线观看| 欧美日韩一区二区在线观看视频| 91精品1区2区| 在线观看日韩一区| 欧美性生活久久| 精品婷婷伊人一区三区三| 色偷偷久久一区二区三区| 99久久精品情趣| 成人av中文字幕| www.欧美日韩| 一本大道久久a久久综合婷婷| 波多野结衣一区二区三区| 不卡av免费在线观看| av在线播放不卡| 日本福利一区二区| 欧美系列在线观看| 717成人午夜免费福利电影| 日韩一级欧美一级| 精品国产第一区二区三区观看体验 | 欧美日韩免费一区二区三区视频 | 久久99久久久欧美国产| 久国产精品韩国三级视频| 久久国产精品99精品国产| 激情偷乱视频一区二区三区| 国产在线视视频有精品| 国产**成人网毛片九色| 色综合一个色综合亚洲| 欧美视频中文一区二区三区在线观看| 欧美日韩一级大片网址| 日韩欧美一二三| 久久久综合精品| 亚洲色图20p| 亚洲成av人片| 精品亚洲aⅴ乱码一区二区三区| 国产高清视频一区| 成人app下载| 欧美探花视频资源| 欧美tickle裸体挠脚心vk| 国产精品丝袜一区| 亚洲综合免费观看高清完整版| 日韩国产精品91| 国产白丝精品91爽爽久久 | 中文字幕永久在线不卡| 亚洲与欧洲av电影| 国产中文字幕精品| 91麻豆免费看| 日韩视频在线永久播放| 国产精品久久久久久久蜜臀| 日韩高清欧美激情| 成人app网站| 日韩女优av电影| 亚洲精品日产精品乱码不卡| 看电影不卡的网站| 色综合亚洲欧洲| 欧美变态口味重另类| 亚洲精选免费视频| 国产一区二区视频在线播放| 欧洲视频一区二区| 久久精品一区蜜桃臀影院| 一区二区三区美女| 国产麻豆成人传媒免费观看| 欧美视频在线不卡| 国产精品色眯眯| 九色porny丨国产精品| 在线视频欧美精品| 国产亚洲欧洲一区高清在线观看| 性感美女极品91精品| 成人av网址在线观看| 日韩欧美国产一区二区在线播放 | 中文字幕在线视频一区| 喷白浆一区二区| 欧美最猛性xxxxx直播| 国产偷国产偷亚洲高清人白洁| 亚洲gay无套男同| 日本道精品一区二区三区| 国产日产欧美一区| 精东粉嫩av免费一区二区三区| 欧美日韩中文精品| 亚洲男同性视频| 大胆亚洲人体视频| 久久麻豆一区二区| 精品一区二区免费视频| 日韩三级在线免费观看| 午夜视频在线观看一区二区| 色婷婷精品大在线视频| 欧美国产一区二区| 国产成人免费在线视频| 久久一区二区三区国产精品| 美女在线一区二区| 91精品国产综合久久久蜜臀图片| 亚洲综合自拍偷拍| 欧美在线免费观看亚洲| 亚洲卡通欧美制服中文| 一本色道久久综合狠狠躁的推荐| 国产精品免费丝袜| 国产成人精品亚洲777人妖| 久久精品一区蜜桃臀影院| 国产剧情一区在线| 久久久亚洲精华液精华液精华液| 国内精品国产成人| 久久人人爽人人爽| 国产精品资源网| 国产亚洲欧洲997久久综合| 国产成人在线电影| 亚洲国产精品成人久久综合一区| 国产乱色国产精品免费视频| 久久久精品天堂| 成人夜色视频网站在线观看| 国产精品国产自产拍高清av | 中文字幕在线观看一区| 99久久综合国产精品| 亚洲乱码国产乱码精品精的特点| 91激情在线视频| 亚洲成年人网站在线观看| 日韩无一区二区| 国产精品2024| 亚洲人成网站在线| 欧美午夜精品电影| 久久精品久久精品| 国产农村妇女毛片精品久久麻豆 | 午夜精品久久久久久久久久 | 欧美精品久久99久久在免费线| 午夜精品福利久久久| 精品国产乱码91久久久久久网站| 国产a精品视频| 亚洲在线视频网站| 精品少妇一区二区三区视频免付费| 国产激情视频一区二区三区欧美 |