Created
September 27, 2016 13:01
-
-
Save sunshinekitty/458fb2c899effe53954b018f00c0bccd to your computer and use it in GitHub Desktop.
Revisions
-
sunshinekitty created this gist
Sep 27, 2016 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,124 @@ #!/usr/bin/env python from urllib2 import urlopen from collections import OrderedDict import re import os import sys def is_valid_hostname(hostname): if len(hostname) > 255: return False if "." not in hostname: return False if hostname[-1] == ".": hostname = hostname[:-1] # strip exactly one dot from the right, if present allowed = re.compile("(?!-)[A-Z\d-]{1,63}(?<!-)$", re.IGNORECASE) return all(allowed.match(x) for x in hostname.split(".")) def hosts_to_dnsmasq(hosts, ignore=[], route="0.0.0.0"): """Converts a list of hosts to a dnsmasq formatted string :param hosts: List of hosts to convert :param route: Where to route requests :param ignore: A list of hosts to ignore :returns: A string of the dnsmasq file """ dnsmasq = "" for line in hosts: try: if line.startswith("#") or '#' in line: pass # don't want these else: if ' ' in line: host = line.split(' ')[1] elif ' ' in line: host = line.split(' ')[1] elif '\t' in line: host = line.split('\t')[1] except IndexError: print line try: if host in ignore or not is_valid_hostname(host): pass # ignore these else: dnsmasq = dnsmasq + "address=/{}/{}\n".format(host, route) except UnboundLocalError: print line return dnsmasq def hulu_dnsmasq(hulu_servers, server): dnsmasq = "" for hulu_server in hulu_servers: dnsmasq = dnsmasq + "address=/{}/{}\n".format(hulu_server,server) return dnsmasq def gather_hosts(url_list): """Grabs hosts entries from a list of url's :param url_list: URL list to block :returns: List of hosts """ to_return = [] for host in url_list: fetched = urlopen(host).read() to_return = to_return + fetched.splitlines() # this removes any dupes from the list return list(OrderedDict.fromkeys(to_return)) ad_lists = [ "http://adblock.gjtech.net/?format=unix-hosts", "https://adaway.org/hosts.txt", "http://hosts-file.net/ad_servers.txt", "http://www.malwaredomainlist.com/hostslist/hosts.txt", "http://someonewhocares.org/hosts/hosts", "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&startdate%5Bday%5D=&startdate%5Bmonth%5D=&startdate%5Byear%5D=&mimetype=plaintext", "http://winhelp2002.mvps.org/hosts.txt", ] hulu_list = [ "ads.hulu.com", "ads-v-darwin.hulu.com", "a.huluad.com", "ads.hulu.com" "a.huluad.com", "hulu.112.2o7.net", "huludev.112.2o7.net", "ll.a.hulu.com", "t2.hulu.com", "t2.huluim.com", "t-ak.hulu.com", "track.hulu.com", "tw.i.hulu.com", "urlcheck.hulu.com" ] ignore_list = [ "btg.mtvnservices.com", # required, don't remove for hulu "tears.io" ] video_server = "192.168.0.138" config_file = "/etc/dnsmasq.d/dnsmasq.adlist.conf" hosts = gather_hosts(ad_lists) dnsmasq = hosts_to_dnsmasq(hosts, ignore_list) dnsmasq = dnsmasq + hulu_dnsmasq(hulu_list, video_server) try: f = open(config_file,'w') f.write(dnsmasq) f.close() except IOError: print("Failed to write to /etc/dnsmasq.d/dnsmasq.adlist.conf, permission denied") sys.exit(1) os.system("/etc/init.d/dnsmasq force-reload")