Created
November 29, 2015 22:41
-
-
Save sonemaro/3af0f813b84cfa6eff29 to your computer and use it in GitHub Desktop.
A simple class for working with Windows routes
This file contains 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 characters
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