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"]