# routen reittien poisteleminen

## Obi-Lan

Voiko millään komennolla poistaa kaikki esim. tiettyyn verkkokorttiin liittyvät routet kerralla? Tai skriptillä?

----------

## Shopro

Mitä haet takaa sillä? Ihan vaan mielenkiinnosta.

----------

## Obi-Lan

Tarkoitus olisi väsää skripti joka poistaa kaikki wan kortin routet, lisää yhden uuden routen, avaa pptp (ppp0) tunnelin ja routtaa kaiken liikenteen sen kautta. Olen saanut tämän toimimaan pptpconfigilla, mutta tahtoisin duunaa skriptin mikä hoitaa kaiken kerralla, esim. jos tarvitsee kone bootata yms.

----------

## jroo

Tuohon varmaan riittää default gatewayn poisto:

```
route del default
```

Ja uuden gatewaynhän saa asetettua komennolla

```
route add default gw <gatewayn osoite>
```

----------

## Obi-Lan

Ee ainaki php liittymästä tulee vielä aliverkko routeihin messiin, ja tuntuu että koko kaupunki on samassa aliverkossa niin sekin pitäisi poistaa (tämä oikeesti haittaa). Tietty tiedän mikä se on ja voin tehdä spesifisen komennon sille, mutta kiinnostaisi tietää jos voin poistaa verkot määrittelemättä sen tarkemmin.

----------

## jroo

Eipä toiminutkaan tuo ehdotus...

----------

## jroo

Tuossa pitäisi olla toimiva python-skripti tuohon ongelmaan.

```
#!/usr/bin/env python

# -*- coding: utf-8 -*-

import os

import sys

from subprocess import Popen

from subprocess import PIPE

## \brief Returns route table as list of strings without the header row

def readRouteOutput():

  process = Popen( 'route -n', shell = True, stdout = PIPE )

  routeTable = process.stdout.readlines()

  

  return routeTable[ 2: ]

## \brief Transforms route table presented as string into tuple.

#

# Tuple contents:

# ( Type, IP, Netmask, Interface )

# Type is eithen 'host' or 'net'

# Interface is the name of the interface

def transformStringToRouteTuple( pRoute ):

  asList = pRoute.split()

  

  type = None

  if 'H' in asList[ 3 ]:

    type = 'host'

  else:

    type = 'net'

  

  ip = asList[ 0 ]

  netmask = asList[ 2 ]

  interface = asList[ 7 ]

  

  routeTuple = ( type, ip, netmask, interface )

  

  return routeTuple

def transformStringsToRouteTupleList( pRouteTable ):

  routeTupleList = []

  for route in pRouteTable:

    routeTupleList.append( transformStringToRouteTuple( route ) )

  

  return routeTupleList

def removeRoutesFromIf( pIfname, pRouteTable ):

  for route in pRouteTable:

    if route[ 3 ] == pIfname:

      command = 'route del' + \

                ' -' + route[ 0 ] + \

                ' ' + route[ 1 ]

      

      if route[ 0 ] == 'net':

        command += ' netmask ' + route[ 2 ]

      

      #print command

      os.system( command )

def main( pArgv ):

  if len( pArgv ) != 2:

    print "Give interface name."

  else:

    routesAsString = readRouteOutput()

    routeTable = transformStringsToRouteTupleList( routesAsString )

    removeRoutesFromIf( pArgv[ 1 ], routeTable )

if __name__ == '__main__':

  main(sys.argv)

```

----------

