view make-tld-conf.py @ 467:f5b394bec28c

allow checking names without A records on uribl lists; improve extraction of fake TLDs from our RPZ zone
author Carl Byington <carl@five-ten-sg.com>
date Wed, 16 Dec 2020 10:25:37 -0800
parents 78eedbbce636
children
line wrap: on
line source

#!/usr/bin/python3

import os, sys, time

def cmd(c):
    print(c)
    return os.popen(c).read().rstrip('\n')

url = 'https://publicsuffix.org/list/effective_tld_names.dat'
c = 'curl %s 2>/dev/null' % url
content = cmd(c)
f=open('tld.conf','w')
f.write(time.strftime("// generated by make-tld-conf.py on %Y-%m-%d %H:%M:%S\n\n"))
for x in content.split('\n'):
    if (x == '') or (x[:2] == '//'): f.write('%s\n' % x)
    else:
        if x[:1] == '!':
            x = x[1:]
            prefix = '!'
        else:
            prefix = ''
        yy = []
        for xx in x.split('.'):
            z = xx.encode('punycode').decode('utf8')
            if z[-1:] == '-': yy.append(xx)
            else:             yy.append('xn--%s' % z)
        y = '.'.join(yy)
        if not (y == x):
            f.write('// %s%s\n' % (prefix, x))
            x = y
        if not prefix and (len(x.split('.')) == 1):
            rc = cmd("dig %s ns +short 2>&1" % x)
            if not rc:
                rc = cmd("sleep 3; dig %s ns +short 2>&1" % x)
                if not rc: prefix = '// no ns record for '
        f.write('%s%s\n' % (prefix, x))
f.write('\n')
f.write('\n')
f.write('// add some TLDs from our rpz zone so names under them\n')
f.write('// can be added to uribl style lists\n')
f.write('\n')

c="grep '^\*.*multi.surbl' /etc/cron.daily/rpz | awk '{print $1}' | cut -c3- | sed -e 's/.multi.surbl.org//g' | grep '\.'"
content = cmd(c)
for x in content.split('\n'):
    f.write(x + '\n')

f.write('\n')
c="grep '^[^\*].*multi.surbl' /etc/cron.daily/rpz | egrep -v 'CNAME|g.write' | awk '{print $1}' | sed -e 's/.multi.surbl.org//g' | cut -d. -f2- | grep '\.'"
content = cmd(c)
for x in content.split('\n'):
    f.write(x + '\n')

f.close()