Skip to content

Instantly share code, notes, and snippets.

@sonemaro
Created November 29, 2015 22:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sonemaro/3af0f813b84cfa6eff29 to your computer and use it in GitHub Desktop.
Save sonemaro/3af0f813b84cfa6eff29 to your computer and use it in GitHub Desktop.
A simple class for working with Windows routes
import subprocess
class RouteEntity(object):
def __init__(self, data):
self.data = data
@property
def destination(self):
return self.data[0]
@property
def netmask(self):
return self.data[1]
@property
def gateway(self):
return self.data[2]
@property
def interface(self):
return self.data[3]
@property
def metric(self):
return self.data[4]
class RouteHelper(object):
def __init__(self):
self._last_error = ''
pass
def get_last_error(self):
return self._last_error
def find_between(self, s, first, last ):
try:
start = s.index( first ) + len( first )
end = s.index( last, start )
return s[start:end]
except ValueError:
return ""
def find_between_r(self, s, first, last ):
try:
start = s.rindex( first ) + len( first )
end = s.rindex( last, start )
return s[start:end]
except ValueError:
return ""
def __popen(self, command, params):
params = params.split(' ')
finalArray = [command] + params
finalArray = filter(None, finalArray)
p = subprocess.Popen(finalArray, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
print err
return out, err
def get_routes(self):
out, err = self.__popen('route', 'print')
if not err:
#separator
sep = '==========================================================================='
route_string = self.find_between(out, 'Active Routes', sep)
routes = []
routes_temp = route_string.split('\r\n')
routes_temp.pop(0)
routes_temp.pop(0)
for route in routes_temp:
finalRoute = []
_r = route.split(' ')
_r = filter(None, _r)
for _rr in _r:
_rr = _rr.strip()
finalRoute.append(_rr)
routeObject = RouteEntity(finalRoute)
routes.append(routeObject)
return routes
return None
def role_action(self, action, route):
dest = route.destination
netmask = route.netmask
gateway = route.gateway
interface = route.interface
metric = route.metric
command = 'route'
action = action.strip()
if action == 'add' or action == 'delete':
params = '{0} {1} mask {2} {3} {4} {5}'.format(action, dest, netmask, gateway, interface, metric)
else:
#TODO, should handle 'change' action
params = ""
out, err = self.__popen(command, params)
if not err:
print out
if out.strip().lower() == 'ok!':
return True
else:
self._last_error = out
return False
self._last_error = err
return False
def add_route(self, route):
return self.role_action('add', route)
def delete_route(self, route):
return self.role_action('delete', route)
route = RouteHelper()
R = RouteEntity(['0.0.0.0', '0.0.0.0', '192.168.2.20', '', ''])
# print route.add_route(R)
print route.delete_route(R)
print route.get_routes()[0].gateway
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment