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

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

?? dns_lookups.py

?? 一個java寫的proxy的例子
?? PY
?? 第 1 頁 / 共 2 頁
字號:
from proxy4_base import *from connection import *# For a high level overview of DNS, see# http://www.rad.com/networks/1998/dns/main.htmlimport whrandomimport dns.dnslib # Guido's DNS libraries put into a packageimport dns.dnsclass import dns.dnsopcodeimport dns.dnstypedef background_lookup(hostname, callback):    "Return immediately, but call callback with a DnsResponse object later"    # Hostnames are case insensitive, so canonicalize for lookup purposes    DnsExpandHostname(lower(hostname), callback)    class DnsResponse:    # A DNS answer can be:    #    ('found', [ipaddrs])    #    ('error', why-str)    #    ('redirect', new-hostname)    def __init__(self, kind, data):        self.kind = kind        self.data = data        print 'DnsResponse(%s, %s)' % (`kind`, `data`)            def isError(self):        return self.kind == 'error'    def isFound(self):        return self.kind == 'found'    def isRedirect(self):        return self.kind == 'redirect'    class DnsConfig:    nameservers = []    search_domains = []    search_patterns = ('www.%s.com', ) # 'www.%s.net', 'www.%s.org')    class DnsExpandHostname:    "Try looking up a hostname and its expansions"    # This routine calls DnsCache to do the individual lookups    def __init__(self, hostname, callback):        self.hostname = hostname        self.callback = callback        self.queries = [hostname] # all queries to be made        self.answers = {} # Map hostname to DNS answer        self.delay = 0.2 # How long do we wait before trying another expansion?        if not dnscache.well_known_hosts.has_key(hostname):            for domain in DnsConfig.search_domains:                self.queries.append(hostname + domain)            if find(hostname, '.') < 0:                # If there's no dot, we should try expanding patterns                for pattern in DnsConfig.search_patterns:                    self.queries.append(pattern % hostname)            else:                # But if there is a dot, let's increase the delay                # because it's very likely that none of the                # search_domains matter.                self.delay = 3        if re.search(r'\s', hostname):            # If there's whitespace, it's almost certainly a copy/paste error,            # so also try the same thing with whitespace removed            self.queries.append(re.sub(r'\s+', '', hostname))        self.requests = self.queries[1:] # queries we haven't yet made        # Issue the primary request        make_timer(0, lambda h=hostname, s=self:                   dnscache.lookup(h, s.handle_dns))        # and then start another request as well        if self.delay < 1: # (it's likely to be needed)            make_timer(self.delay, self.handle_issue_request)    def handle_issue_request(self):        # Issue one DNS request, and set up a timer to issue another        if self.requests and self.callback:            request = self.requests[0]            del self.requests[0]            make_timer(0, lambda r=request, s=self:                       dnscache.lookup(r, s.handle_dns))            # NOTE: Yes, it's possible that several DNS lookups are            # being executed at once.  To avoid that, we could check            # if there's already a timer for this object ..            if self.requests: make_timer(self.delay, self.handle_issue_request)            def handle_dns(self, hostname, answer):        if not self.callback: return # Already handled this query        self.answers[hostname] = answer        while self.queries and self.answers.has_key(self.queries[0]):            current_query = self.queries[0]            del self.queries[0]            answer = self.answers[current_query]            if not answer.isError():                callback, self.callback = self.callback, None                if self.hostname != current_query:                    callback(self.hostname, DnsResponse('redirect', current_query))                else:                    callback(self.hostname, answer)                break        if self.callback and not self.queries:            # Someone's still waiting for an answer, and we             # are expecting no more answers            callback, self.callback = self.callback, None            callback(self.hostname, DnsResponse('error', 'host not expanded'))        # Since one DNS request is satisfied, issue another        self.handle_issue_request()            class DnsCache:    """Provides a lookup function that will either get a value from the cache or    initiate a DNS lookup, fill the cache, and return that value"""    # lookup() can create zero or one DnsLookupHostname objects        ValidCacheEntryExpires = 1800    InvalidCacheEntryExpires = 30        def __init__(self):        self.cache = {} # hostname to DNS answer        self.expires = {} # hostname to cache expiry time        self.pending = {} # hostname to [callbacks]        self.well_known_hosts = {} # hostname to 1, if it's from /etc/hosts        self.read_localhosts()    def read_localhosts(self):        "Fill DnsCache with /etc/hosts information"        for line in open('/etc/hosts', 'r').readlines():            if find(line, '#') >= 0: line = line[:find(line, '#')] # Comments            fields = split(line)            if len(fields) > 0:                # The first one is the IP address, and then the rest are names                # These hosts don't expire from our cache                for name in fields[1:]:                    name = lower(name)                    self.well_known_hosts[name] = 1                    self.cache[name] = DnsResponse('found', [fields[0]])                    self.expires[name] = sys.maxint            def lookup(self, hostname, callback):        if re.match(r'^[.\d]+$', hostname):            # It's an IP address, so let's just return the same thing            # NOTE: this will have to be changed for IPv6            callback(hostname, DnsResponse('found', [hostname]))            return        if hostname[-1:] == '.':            # We should just remove the trailing '.'            return DnsResponse('redirect', hostname[:-1])        if len(hostname) > 100:            # It's too long .. assume it's an error            callback(hostname, DnsResponse('error', 'hostname %s too long' % hostname))            return                if self.cache.has_key(hostname):            if time.time() < self.expires[hostname]:                # It hasn't expired, so return this answer                callback(hostname, self.cache[hostname])                return            elif not self.cache[hostname].isError():                # It has expired, but we can use the old value for now                callback(hostname, self.cache[hostname])                # We *don't* return; instead, we trigger a new cache                # fill and use a dummy callback                callback = lambda h,a:None        if self.pending.has_key(hostname):            # Add this guy to the list of interested parties            self.pending[hostname].append(callback)            return        else:            # Create a new lookup object            self.pending[hostname] = [callback]            DnsLookupHostname(hostname, self.handle_dns)                def handle_dns(self, hostname, answer):        assert self.pending.has_key(hostname)        callbacks = self.pending[hostname]        del self.pending[hostname]        assert (not answer.isFound() or len(answer.data) > 0), \                'Received empty DNS lookup .. should be error? %s' % (answer,)                self.cache[hostname] = answer        if not answer.isError():            self.expires[hostname] = time.time()+self.ValidCacheEntryExpires        else:            self.expires[hostname] = time.time()+self.InvalidCacheEntryExpires                    for c in callbacks:            c(hostname, answer)class DnsLookupHostname:    "Perform DNS lookup on many nameservers"    # Use a DnsLookupConnection per nameserver        # We start working with one nameserver per second, as long as we    # haven't gotten any responses.  For each successive nameserver we    # set the timeout higher, so that the first nameserver has to try    # harder.    def __init__(self, hostname, callback):        self.hostname = hostname        self.callback = callback        self.nameservers = DnsConfig.nameservers[:]        self.requests = []        self.outstanding_requests = 0                self.issue_request()    def cancel(self):        if self.callback:            self.callback = None            # Now let's go through and tell all the lookup operations            # that there's no need to contact us            for r in self.requests:                if r.callback == self.handle_dns:                    r.cancel()                    self.outstanding_requests = self.outstanding_requests - 1                assert r.callback is None            assert self.outstanding_requests == 0                def issue_request(self):        if not self.callback: return                if not self.nameservers and not self.outstanding_requests:            self.callback(self.hostname, DnsResponse('error', 'no nameserver found host'))            self.callback = None        elif self.nameservers:            nameserver = self.nameservers[0]

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀91精品一区二区三区| 亚洲v中文字幕| 日韩欧美一二三区| 91精品国产综合久久婷婷香蕉| 色综合久久88色综合天天6 | 色视频一区二区| 国产a精品视频| 成人夜色视频网站在线观看| 懂色av噜噜一区二区三区av| 成人免费电影视频| 99v久久综合狠狠综合久久| www.激情成人| 日本高清视频一区二区| 欧美亚洲自拍偷拍| 欧美日韩高清不卡| 日韩美女在线视频| 国产清纯美女被跳蛋高潮一区二区久久w| 精品人在线二区三区| 久久综合国产精品| 国产精品嫩草影院com| 亚洲黄网站在线观看| 午夜不卡av免费| 精品综合免费视频观看| 成人激情av网| 欧美精品日韩一本| 久久亚洲私人国产精品va媚药| 国产丝袜欧美中文另类| 亚洲一区免费在线观看| 日本vs亚洲vs韩国一区三区| 国产精品18久久久| 在线免费观看成人短视频| 91精品一区二区三区久久久久久 | 国产日韩视频一区二区三区| 亚洲欧美视频在线观看视频| 午夜视频在线观看一区二区| 国产一区二区三区不卡在线观看| 99久久久无码国产精品| 日韩欧美另类在线| 亚洲欧美日韩国产一区二区三区| 日韩精品三区四区| 不卡的av在线| 欧美一二三在线| 亚洲女同一区二区| 激情国产一区二区| 欧美日韩国产经典色站一区二区三区| 国产日韩欧美在线一区| 日韩国产一区二| 日本福利一区二区| 久久综合久久久久88| 偷拍与自拍一区| 91麻豆免费观看| 久久久电影一区二区三区| 午夜精品福利久久久| 99久久伊人久久99| 久久久91精品国产一区二区精品| 五月综合激情婷婷六月色窝| 色综合久久九月婷婷色综合| 久久久久久免费毛片精品| 日韩成人一级片| 欧美性xxxxx极品少妇| 国产精品色哟哟网站| 激情综合亚洲精品| 日韩视频免费直播| 午夜精品久久久久久久久久久 | 制服丝袜av成人在线看| 亚洲欧美另类在线| 91原创在线视频| 国产精品乱码一区二三区小蝌蚪| 国产综合色在线视频区| 日韩精品资源二区在线| 日本欧美一区二区| 555www色欧美视频| 日韩黄色一级片| 欧美精品粉嫩高潮一区二区| 午夜精品成人在线视频| 欧美性视频一区二区三区| 亚洲免费观看高清完整版在线观看 | 欧美经典一区二区三区| 国产精品小仙女| 国产无人区一区二区三区| 狠狠色综合播放一区二区| 日韩精品一区二区三区三区免费| 奇米色777欧美一区二区| 欧美日本国产视频| 蜜乳av一区二区| 精品日韩在线观看| 国产福利一区在线| 国产精品久久久久影院| 一本色道**综合亚洲精品蜜桃冫| 亚洲欧美另类小说| 欧美日本国产视频| 久草中文综合在线| 欧美极品xxx| 91女人视频在线观看| 亚洲午夜久久久久久久久电影网 | 国产精品一级二级三级| 亚洲国产精品ⅴa在线观看| 99国产精品久| 日韩在线一区二区| 2020日本不卡一区二区视频| 国产经典欧美精品| 一片黄亚洲嫩模| 日韩欧美在线影院| 波多野结衣在线一区| 亚洲高清视频在线| 久久青草国产手机看片福利盒子| www.av精品| 蜜臀av亚洲一区中文字幕| 国产精品国产三级国产aⅴ入口 | 国产99久久精品| 一区二区三区鲁丝不卡| 欧美tk丨vk视频| 91免费视频观看| 经典三级视频一区| 亚洲一区二区成人在线观看| 精品国产1区2区3区| 91精品1区2区| 国产资源在线一区| 亚洲在线成人精品| 日本一区二区三区四区| 在线综合视频播放| 99re亚洲国产精品| 国产伦精品一区二区三区在线观看| 国产精品电影院| 久久在线免费观看| 欧美日韩aaaaa| 97se狠狠狠综合亚洲狠狠| 美女一区二区三区在线观看| 亚洲欧美另类久久久精品| 久久久久久久久免费| 欧美精品免费视频| 日本道精品一区二区三区| 国产一区二区久久| 精品一区二区三区在线视频| 一二三区精品视频| 国产精品久久久久久福利一牛影视| 日韩欧美亚洲另类制服综合在线| 色综合中文字幕国产 | 色综合天天综合给合国产| 国产真实精品久久二三区| 午夜精品123| 亚洲小说春色综合另类电影| 亚洲国产高清aⅴ视频| 26uuu国产电影一区二区| 欧美一区二区三区婷婷月色| 欧美日韩小视频| 欧美影院一区二区| 91久久精品日日躁夜夜躁欧美| 成人一级片在线观看| 国产精品一区在线观看乱码| 久久超碰97中文字幕| 全国精品久久少妇| 日韩av网站免费在线| 日本一区中文字幕 | 久久久精品国产99久久精品芒果| 日韩网站在线看片你懂的| 日韩一区二区电影| 欧美一区二区三区免费大片| 在线电影欧美成精品| 制服丝袜亚洲网站| 日韩女优毛片在线| 久久久久久一二三区| 欧美经典一区二区| 亚洲婷婷国产精品电影人久久| 中文字幕人成不卡一区| 综合激情成人伊人| 亚洲无线码一区二区三区| 天天操天天综合网| 久久精品国产久精国产| 国产一区欧美二区| 成人综合日日夜夜| 色久优优欧美色久优优| 欧美美女直播网站| 精品裸体舞一区二区三区| 国产欧美一区二区精品仙草咪| 国产精品国产成人国产三级 | 蜜桃久久久久久| 国产不卡在线播放| 色欧美乱欧美15图片| 欧美日韩二区三区| 亚洲精品在线三区| 亚洲欧美日韩国产中文在线| 午夜精品一区二区三区电影天堂 | 久久久久免费观看| 亚洲靠逼com| 麻豆成人av在线| eeuss鲁片一区二区三区| 欧美日韩欧美一区二区| 久久日韩粉嫩一区二区三区| 最新日韩在线视频| 蜜桃av一区二区| 99国产精品久久久久久久久久| 欧美精品一二三| 欧美国产日韩精品免费观看| 亚洲成人手机在线| 丁香六月久久综合狠狠色| 欧美日韩一二三| 国产精品第13页| 免费看欧美女人艹b| 97久久超碰国产精品|