4 from optparse import OptionParser
5 from dns.resolver import query
6 from dns.exception import DNSException
10 config = '/etc/setroute.list'
12 # read domains from file
15 lines = [line.strip() for line in open(config)]
24 # host to IP addresses
30 print name+"->"+i.to_text()
31 ip.append(i.to_text())
37 # convert names into IP addresses
39 re_ip = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$')
43 ip_list = list(set(ip_list + [name]))
44 print name+' appended'
47 ip_list = list(set(ip_list + ip))
51 def set_route(list,interface,gateway,dest,remove):
56 command = "route del -net %s netmask 255.255.255.255 gw %s dev %s" % (i,gateway,interface)
58 command = "route del -net %s netmask 255.255.255.255 dev %s" % (i,interface)
60 command = "iptables -t nat -D OUTPUT -p tcp -d %s -m tcp -j DNAT --to-destination %s" % (i,dest)
62 command = "route del -net %s netmask 255.255.255.255 gw %s" % (i,gateway)
64 command = "ipset del %s %s" %(ipset,i)
66 commands.getoutput(command)
70 command = "route add -net %s netmask 255.255.255.255 gw %s dev %s" % (i,gateway,interface)
72 command = "route add -net %s netmask 255.255.255.255 dev %s" % (i,interface)
74 command = "iptables -t nat -I OUTPUT -p tcp -d %s -m tcp -j DNAT --to-destination %s" % (i,dest)
76 command = "route add -net %s netmask 255.255.255.255 gw %s" % (i,gateway)
78 command = "ipset add %s %s" %(ipset,i)
80 commands.getoutput(command)
82 # main procedure - process input parameters, read file and set route
84 global dest,interface,gateway,remove
86 domain_list = read_list(config)
88 print "Cannot get domains list from file", config
90 ip_list = to_ip(domain_list)
91 set_route(ip_list,interface,gateway,dest,remove)
93 if __name__ == "__main__":
94 parser = OptionParser()
95 parser.add_option("-l", "--list", dest="config", help="Domain names list (default /etc/setroute.list) " )
96 parser.add_option("-s", "--ipset", dest="ipset", help="IPset to fill in")
97 parser.add_option("-d", "--destination", dest="destination", help="Proxy server (IP:Port)")
98 parser.add_option("-i", "--interface", dest="interface", help="Interface name")
99 parser.add_option("-g", "--gateway", dest="gateway", help="Gateway IP")
100 parser.add_option("-r", "--remove", action="store_true", dest="remove", help="Remove redirection")
101 (options, args) = parser.parse_args()
102 opts = options.__dict__
104 config = opts["config"]
105 if opts["destination"]:
106 dest = opts["destination"]
109 if opts["interface"]:
110 interface = opts["interface"]
114 gateway = opts["gateway"]
118 remove = opts["remove"]
122 ipset = opts["ipset"]