Esempio n. 1
0
    def config(self):
        from apfilter import ap_filter

        self.gfwlist = ap_filter()
        self.local = ap_filter()
        self.ignore = ap_filter()  # used by rules like "||twimg.com auto"

        for line in open("./fgfw-lite/local.txt"):
            rule, _, dest = line.strip().partition(" ")
            if dest:  # |http://www.google.com/url forcehttps
                self.add_redirect(rule, dest)
            else:
                self.add_rule(line, local=True)

        if self.conf.rproxy is False:
            self.logger.info("loading  gfwlist...")
            try:
                with open("./fgfw-lite/gfwlist.txt") as f:
                    data = f.read()
                    if "!" not in data:
                        data = "".join(data.split())
                        data = base64.b64decode(data).decode()
                    for line in data.splitlines():
                        self.add_rule(line)
            except Exception:
                self.logger.warning("./fgfw-lite/gfwlist.txt is corrupted!")
Esempio n. 2
0
    def config(self):
        from apfilter import ap_filter
        self.gfwlist = ap_filter()
        self.local = ap_filter()
        self.ignore = ap_filter()  # used by rules like "||twimg.com auto"

        for line in open('./fgfw-lite/local.txt'):
            rule, _, dest = line.strip().partition(' ')
            if dest:  # |http://www.google.com/url forcehttps
                self.add_redirect(rule, dest)
            else:
                self.add_rule(line, local=True)

        if self.conf.rproxy is False:
            self.logger.info('loading  gfwlist...')
            try:
                with open('./fgfw-lite/gfwlist.txt') as f:
                    data = f.read()
                    if '!' not in data:
                        data = ''.join(data.split())
                        data = base64.b64decode(data).decode()
                    for line in data.splitlines():
                        self.add_rule(line)
            except Exception:
                self.logger.warning('./fgfw-lite/gfwlist.txt is corrupted!')
Esempio n. 3
0
 def __init__(self, conf):
     self.conf = conf
     self.logger = logging.getLogger('redirector')
     self.logger.setLevel(logging.INFO)
     hdr = logging.StreamHandler()
     formatter = logging.Formatter('%(asctime)s %(name)s:%(levelname)s %(message)s',
                                   datefmt='%H:%M:%S')
     hdr.setFormatter(formatter)
     self.logger.addHandler(hdr)
     self._bad302 = ap_filter()
     self.adblock = ap_filter()
     self.redirlst = []
Esempio n. 4
0
 def __init__(self, conf):
     from apfilter import ap_filter
     self.conf = conf
     self.logger = logging.getLogger('redirector')
     self.logger.setLevel(logging.INFO)
     hdr = logging.StreamHandler()
     formatter = logging.Formatter(
         '%(asctime)s %(name)s:%(levelname)s %(message)s',
         datefmt='%H:%M:%S')
     hdr.setFormatter(formatter)
     self.logger.addHandler(hdr)
     self._bad302 = ap_filter()
     self.adblock = ap_filter()
     self.redirlst = []
Esempio n. 5
0
    def config(self):
        self.gfwlist = ap_filter()
        self.force = ap_filter()
        self.temp = []
        self.temp_rules = set()
        self.ignore = []

        for line in open('./fgfw-lite/local.txt'):
            rule, _, dest = line.strip().partition(' ')
            if dest:  # |http://www.google.com/url forcehttps
                self.add_redirect(rule, dest)
            else:
                self.add_temp(line, quiet=True)

        if self.conf.rproxy is False:
            for line in open('./fgfw-lite/cloud.txt'):
                rule, _, dest = line.strip().partition(' ')
                if dest:  # |http://www.google.com/url forcehttps
                    self.add_redirect(rule, dest)
                else:
                    self.add_rule(line, force=True)

            self.logger.info('loading  gfwlist...')
            try:
                with open('./fgfw-lite/gfwlist.txt') as f:
                    data = f.read()
                    if '!' not in data:
                        data = ''.join(data.split())
                        data = base64.b64decode(data).decode()
                    for line in data.splitlines():
                        self.add_rule(line)
            except:
                self.logger.warning('./fgfw-lite/gfwlist.txt is corrupted!')

            if self.conf.userconf.dgetbool('fgfwproxy', 'adblock', False):
                self.logger.info('loading adblock...')
                try:
                    with open('./fgfw-lite/adblock.txt') as f:
                        data = f.read()
                        for line in data.splitlines():
                            if line.startswith('||') and line.endswith('^'):
                                self.add_redirect(line, 'adblock')
                except:
                    self.logger.warning('./fgfw-lite/adblock.txt is corrupted!')
Esempio n. 6
0
def start_dns_server(server_address, localserver=('223.5.5.5', 53), remoteserver=('8.8.8.8', 53), proxy=None):
    from resolver import get_resolver
    from apfilter import ap_filter
    import base64
    af = ap_filter()
    with open('gfwlist.txt') as f:
        data = f.read()
        if '!' not in data:
            data = ''.join(data.split())
            data = base64.b64decode(data).decode()
        for line in data.splitlines():
            if '||' in line:
                try:
                    af.add(line)
                except:
                    pass
    r = get_resolver(localserver, remoteserver, proxy, af)
    resolver = Resolver(r)
    server = UDPDNSServer(server_address, DNSHandler, resolver)
    server.serve_forever()
Esempio n. 7
0
 def __init__(self, conf):
     self.conf = conf
     self.logger = conf.logger
     self._bad302 = ap_filter()
     self.adblock = ap_filter()
     self.redirlst = []
Esempio n. 8
0
def get_resolver(localdns,
                 remotedns=None,
                 proxy=None,
                 apfilter=None,
                 bad_ip=None):
    bad_ip = bad_ip or set()
    if not remotedns or localdns == remotedns:
        return Resolver(localdns)
    else:
        return Anti_GFW_Resolver(localdns, remotedns, proxy, apfilter, bad_ip)


if __name__ == '__main__':
    from apfilter import ap_filter
    import base64
    apfilter = ap_filter()
    with open('./gfwlist.txt', 'r') as f:
        data = f.read()
        if '!' not in data:
            data = ''.join(data.split())
            data = base64.b64decode(data).decode()
        for line in data.splitlines():
            if '||' in line:
                apfilter.add(line)
    print('test apfilter...')
    print(apfilter.match('twitter.com', 'twitter.com', True))
    print(apfilter.match('www.163.com', 'www.163.com', True))

    resolver = get_resolver([
        ('119.29.29.29', 53),
    ], [
Esempio n. 9
0
        return self.remote.record(domain, qtype)

    def is_poisoned(self, domain):
        if self.apfilter and self.apfilter.match(domain, domain, True):
            return True


def get_resolver(localdns, remotedns=None, proxy=None, apfilter=None):
    if not remotedns or localdns == remotedns:
        return Resolver(localdns)
    else:
        return Anti_GFW_Resolver(localdns, remotedns, proxy, apfilter)

if __name__ == '__main__':
    from apfilter import ap_filter
    import base64
    apfilter = ap_filter()
    with open('./gfwlist.txt', 'r') as f:
        data = f.read()
        if '!' not in data:
            data = ''.join(data.split())
            data = base64.b64decode(data).decode()
        for line in data.splitlines():
            if '||' in line:
                apfilter.add(line)
    print(apfilter.match('twitter.com', 'twitter.com', True))
    resolver = get_resolver(('223.5.5.5', 53), ('8.8.8.8', 53), 'http://127.0.0.1:8119', apfilter)
    print(resolver.record('twitter.com', 'ANY'))
    print(resolver.resolve('twitter.com'))
    print(resolver.get_ip_address('twitter.com'))
Esempio n. 10
0
 def __init__(self, conf):
     self.conf = conf
     self.logger = conf.logger
     self._bad302 = ap_filter()
     self.adblock = ap_filter()
     self.redirlst = []