예제 #1
0
def topology():
    "Create a network with some docker containers acting as hosts."

    net = Containernet(controller=Controller)

    info('*** Adding controller\n')
    net.addController('c0')   

    info('*** Adding docker containers\n')
    
    # Containers de imagenes con herramientas de red 
    A = net.addDocker('A', ip='10.0.0.100', dimage="openswitch/ubuntuscapy", volumes=["/home/tigarto/Documents/test_diarios_tesis/abril17/test1/trazas:/mnt/trazas:rw"])
    V = net.addDocker('V', ip='10.0.0.101', dimage="openswitch/ubuntuscapy") 


    info('*** Adding switch\n')
    s1 = net.addSwitch('s1')
    

    info('*** Creating links\n')
    net.addLink(A, s1)
    net.addLink(s1, V)
    

    info('*** Starting network\n')
    net.start()
    
    info('***Testing network connectivity***')
    net.pingAll()

    info('*** Running CLI\n')
    CLI(net)

    info('*** Stopping network')
    net.stop()
def run():
    net = Containernet(controller=Controller)
    net.addController('c0', port=6654)

    info('*** Adding routers\n')
    r1 = net.addHost('r1', cls=LinuxRouter, ip='10.0.0.1/24')
    r2 = net.addHost('r2', cls=LinuxRouter, ip='10.1.0.1/24')

    info('*** Adding switches\n')
    s1, s2 = [net.addSwitch(s) for s in ('s1', 's2')]

    info('*** Adding host-switch links\n')
    net.addLink(s1, r1, intfName2='r1-eth1', params2={'ip': '10.0.0.1/24'})

    net.addLink(s2, r2, intfName2='r2-eth1', params2={'ip': '10.1.0.1/24'})

    info('*** Adding switch-switch link\n')
    net.addLink(r1,
                r2,
                intfName1='r1-eth2',
                intfName2='r2-eth2',
                params1={'ip': '10.100.0.1/24'},
                params2={'ip': '10.100.0.2/24'})

    info('*** Adding routing\n')
    # r1.cmd("ip route add 10.1.0.0/24 via 10.100.0.1")
    # r2.cmd("ip route add 10.0.0.0/24 via 10.100.0.2")
    r1.cmd("ip route add 10.1.0.0/24 via 10.100.0.2 dev r1-eth2")
    r2.cmd("ip route add 10.0.0.0/24 via 10.100.0.1 dev r2-eth2")

    info('*** Adding hosts\n')
    d1 = net.addHost(name='d1',
                     ip='10.0.0.251/24',
                     defaultRoute='via 10.0.0.1')
    d2 = net.addHost(name='d2',
                     ip='10.1.0.252/24',
                     defaultRoute='via 10.1.0.1')

    info('*** Adding host-switch link\n')
    for d, s in [(d1, s1), (d2, s2)]:
        info(net.addLink(d, s))

    info('*** Starting network\n')
    net.start()
    net.staticArp()

    info('*** Routing Table on Router:\n')
    print((net['r1'].cmd('route')))

    info('*** Routing Table on Router:\n')
    print((net['r2'].cmd('route')))

    info('*** Testing connectivity\n')
    net.pingAll()

    CLI(net)
    net.stop()
예제 #3
0
def topology():
    "Create a network with some docker containers acting as hosts."

    net = Containernet(controller=Controller)

    info('*** Adding controller\n')
    net.addController('c0')

    info('*** Adding docker containers\n')
    '''
    Containers de imagenes sin herramientas de red
    h1 = net.addDocker('h1', ip='10.0.0.100', dimage="ubuntu:latest")
    h2 = net.addDocker('h2', ip='10.0.0.101', dimage="ubuntu:latest") 
    h3 = net.addDocker('h3', ip='10.0.0.102', dimage="ubuntu:latest")  
    '''
    # Containers de imagenes con herramientas de red
    h1 = net.addDocker('h1', ip='10.0.0.100', dimage="ubuntu_net_tools")
    h2 = net.addDocker('h2', ip='10.0.0.101', dimage="ubuntu_net_tools")
    h3 = net.addDocker('h3', ip='10.0.0.102', dimage="ubuntu_net_tools")

    info('*** Adding switch\n')
    s1 = net.addSwitch('s1')

    info('*** Creating links\n')
    net.addLink(h1, s1)
    net.addLink(h2, s1)
    net.addLink(s1, h3)

    info('*** Starting network\n')
    net.start()

    info('***Testing network connectivity***')
    net.pingAll()

    info('*** Running CLI\n')
    CLI(net)

    info('*** Stopping network')
    net.stop()
def run():
    net = Containernet(controller=Controller)  # controller is used by s1-s3
    net.addController('c0', port=6654)

    # net = ipaddress.ip_network('192.0.2.0/24')
    # router_1 = ipaddress.ip_address('10.0.1.1')
    # router_2 = ipaddress.ip_address('10.0.2.1')
    # router_3 = ipaddress.ip_address('10.0.3.1')
    #

    networks = [
        ipaddress.ip_network('10.0.{}.0/24'.format(net))
        for net in range(0, 3)
    ]
    linking_networks = [
        ipaddress.ip_network('10.{}.0.0/24'.format(net))
        for net in range(10, 40, 10)
    ]
    print(networks)
    print(linking_networks)

    router_1 = '{}/24'.format(next(networks[0].hosts()))
    router_2 = '{}/24'.format(next(networks[1].hosts()))
    router_3 = '{}/24'.format(next(networks[2].hosts()))

    info('*** Adding routers\n')
    r1 = net.addHost('r1', cls=LinuxRouter, ip=router_1)
    r2 = net.addHost('r2', cls=LinuxRouter, ip=router_2)
    r3 = net.addHost('r3', cls=LinuxRouter, ip=router_3)

    info('*** Adding switches\n')
    s1, s2, s3 = [net.addSwitch(s) for s in ('s1', 's2', 's3')]

    info('*** Adding host-switch links\n')
    net.addLink(s1, r1, intfName2='r1-eth1', params2={'ip': router_1})

    net.addLink(s2, r2, intfName2='r2-eth1', params2={'ip': router_2})

    net.addLink(s3, r3, intfName2='r3-eth1', params2={'ip': router_3})

    info('*** Adding router-router links\n')
    net.addLink(
        r1,
        r2,
        intfName1='r1-eth2',
        intfName2='r2-eth2',
        params1={'ip': '{}/24'.format(linking_networks[0][1].compressed)},
        params2={'ip': '{}/24'.format(linking_networks[0][2].compressed)})
    net.addLink(
        r2,
        r3,
        intfName1='r2-eth3',
        intfName2='r3-eth2',
        params1={'ip': '{}/24'.format(linking_networks[1][1].compressed)},
        params2={'ip': '{}/24'.format(linking_networks[1][2].compressed)})
    net.addLink(
        r1,
        r3,
        intfName1='r1-eth3',
        intfName2='r3-eth3',
        params1={'ip': '{}/24'.format(linking_networks[2][1].compressed)},
        params2={'ip': '{}/24'.format(linking_networks[2][2].compressed)})

    info('*** Adding routing\n')
    r1.cmd("ip route add 10.0.1.0/24 via 10.10.0.2 dev r1-eth2")
    r2.cmd("ip route add 10.0.0.0/24 via 10.10.0.1 dev r2-eth2")

    r2.cmd("ip route add 10.0.2.0/24 via 10.20.0.2 dev r2-eth3")
    r3.cmd("ip route add 10.0.1.0/24 via 10.20.0.1 dev r3-eth2")

    r1.cmd("ip route add 10.0.2.0/24 via 10.30.0.2 dev r1-eth3")
    r3.cmd("ip route add 10.0.0.0/24 via 10.30.0.1 dev r3-eth3")

    info('*** Adding hosts\n')
    d1 = net.addDocker(name='d1',
                       ip='10.0.0.251/24',
                       defaultRoute='via 10.0.0.1',
                       ports=[1883],
                       port_bindings={1883: 1883},
                       dimage=IMAGE_NAME,
                       environment={
                           "EMQX_NAME": "docker1",
                           "EMQX_HOST": "10.0.0.251",
                           "EMQX_NODE__DIST_LISTEN_MAX": 6379,
                           "EMQX_LISTENER__TCP__EXTERNAL": 1883,
                           "EMQX_CLUSTER__DISCOVERY": "static",
                           "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"
                       })

    d2 = net.addDocker(name='d2',
                       ip='10.0.1.252/24',
                       defaultRoute='via 10.0.1.1',
                       ports=[1883],
                       port_bindings={1883: 1884},
                       dimage=IMAGE_NAME,
                       environment={
                           "EMQX_NAME": "docker2",
                           "EMQX_HOST": "10.0.1.252",
                           "EMQX_NODE__DIST_LISTEN_MAX": 6379,
                           "EMQX_LISTENER__TCP__EXTERNAL": 1883,
                           "EMQX_CLUSTER__DISCOVERY": "static",
                           "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"
                       })

    d3 = net.addDocker(name='d3',
                       ip='10.0.2.253/24',
                       defaultRoute='via 10.0.2.1',
                       ports=[1883],
                       port_bindings={1883: 1885},
                       dimage=IMAGE_NAME,
                       environment={
                           "EMQX_NAME": "docker3",
                           "EMQX_HOST": "10.0.2.253",
                           "EMQX_NODE__DIST_LISTEN_MAX": 6379,
                           "EMQX_LISTENER__TCP__EXTERNAL": 1883,
                           "EMQX_CLUSTER__DISCOVERY": "static",
                           "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"
                       })

    info('*** Adding host-switch link\n')
    for d, s in [(d1, s1), (d2, s2), (d3, s3)]:
        print(net.addLink(d, s))

    info('*** Starting network\n')
    net.start()
    net.staticArp()

    info('*** Routing Table on Router:\n')
    print((net['r1'].cmd('route')))

    info('*** Routing Table on Router:\n')
    print((net['r2'].cmd('route')))

    info('*** Routing Table on Router:\n')
    print((net['r3'].cmd('route')))

    info('*** Testing connectivity\n')
    net.pingAll()

    info('*** Starting brokers\n')
    d1.start()
    d2.start()
    d3.start()

    CLI(net)
    net.stop()
def run():
    "Test linux router"
    net = Containernet(controller=Controller)  # controller is used by s1-s3
    net.addController('c0', port=6654)

    defaultIP = '10.0.0.1/24'  # IP address for r0-eth1
    router = net.addHost('r0', cls=LinuxRouter, ip=defaultIP)

    s1, s2, s3 = [net.addSwitch(s) for s in ('s1', 's2', 's3')]

    net.addLink(s1, router, intfName2='r0-eth1', params2={'ip': defaultIP})
    net.addLink(s2, router, intfName2='r0-eth2', params2={'ip': '10.0.1.1/24'})
    net.addLink(s3,
                router,
                intfName2='r0-eth3',
                params2={'ip': '192.0.2.1/24'})

    d1 = net.addDocker(name='d1',
                       ip='10.0.0.251/24',
                       defaultRoute='via 10.0.0.1',
                       ports=[1883],
                       port_bindings={1883: 1883},
                       dimage=IMAGE_NAME,
                       environment={
                           "EMQX_NAME": "docker1",
                           "EMQX_HOST": "10.0.0.251",
                           "EMQX_NODE__DIST_LISTEN_MAX": 6379,
                           "EMQX_LISTENER__TCP__EXTERNAL": 1883,
                           "EMQX_CLUSTER__DISCOVERY": "static",
                           "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"
                       })

    d2 = net.addDocker(name='d2',
                       ip='10.0.1.252/24',
                       defaultRoute='via 10.0.1.1',
                       ports=[1883],
                       port_bindings={1883: 1884},
                       dimage=IMAGE_NAME,
                       environment={
                           "EMQX_NAME": "docker2",
                           "EMQX_HOST": "10.0.1.252",
                           "EMQX_NODE__DIST_LISTEN_MAX": 6379,
                           "EMQX_LISTENER__TCP__EXTERNAL": 1883,
                           "EMQX_CLUSTER__DISCOVERY": "static",
                           "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"
                       })

    d3 = net.addDocker(name='d3',
                       ip='192.0.2.253/24',
                       defaultRoute='via 192.0.2.1',
                       ports=[1883],
                       port_bindings={1883: 1885},
                       dimage=IMAGE_NAME,
                       environment={
                           "EMQX_NAME": "docker3",
                           "EMQX_HOST": "192.0.2.253",
                           "EMQX_NODE__DIST_LISTEN_MAX": 6379,
                           "EMQX_LISTENER__TCP__EXTERNAL": 1883,
                           "EMQX_CLUSTER__DISCOVERY": "static",
                           "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"
                       })

    for h, s in [(d1, s1), (d2, s2), (d3, s3)]:
        info(net.addLink(h, s, cls=TCLink, delay='10ms'))

    info('*** Starting network\n')
    net.start()
    net.staticArp()

    info('*** Testing connectivity\n')
    net.pingAll()

    info('*** Routing Table on Router:\n')
    print((net['r0'].cmd('route')))

    info('*** Starting brokers\n')
    d1.start()
    d2.start()
    d3.start()

    CLI(net)
    net.stop()
예제 #6
0
def topoloy():
    """
    Topologia final sobre ContainerNet
    `user_leg` usuarios legitimos,`bot` hosts bots infectados,
    `vict` servidores
    `dns` servidor DNS en la topologia, `ids` IDS snort sniffer.
    :return: `void`:
    """
    # setLogLevel('info')
    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger(__name__)

    # ############################################
    #           Config Controller
    # ############################################

    onos = RemoteController('onos', ip=IP_CONTROLLER, port=PORT_CONTROLLER)
    net = Containernet(controller=RemoteController, link=TCLink)
    logger.info("Adding controller")
    # info('*** Adding controller\n')
    net.addController(onos)

    # ############################################
    #           Docker containers.
    # ############################################
    logger.info('Adding docker containers')

    # --------------------------------------
    #       IDS: Snort 4.x
    # --------------------------------------

    ids = [
        net.addDocker('ids1',
                      ip='192.168.12.3/16',
                      dimage=DI_SNORT,
                      mem_limit=MEM_IDS,
                      dmcd='./start.sh'),
        net.addDocker('ids2',
                      ip='192.168.13.3/16',
                      dimage=DI_SNORT,
                      mem_limit=MEM_IDS,
                      dmcd='./start.sh'),
        net.addDocker('ids3',
                      ip='192.168.14.3/16',
                      dimage=DI_SNORT,
                      mem_limit=MEM_IDS,
                      dmcd='./start.sh'),
        net.addDocker('ids4',
                      ip='192.168.15.3/16',
                      dimage=DI_SNORT,
                      mem_limit=MEM_IDS,
                      dmcd='./start.sh')
    ]

    # --------------------------------------
    #       USER: ubuntu trusty
    # --------------------------------------

    users = [
        net.addDocker('user_leg0',
                      ip='192.168.4.10/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD),
        net.addDocker('user_leg1',
                      ip='192.168.4.11/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD),
        net.addDocker('user_leg2',
                      ip='192.168.5.12/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD),
        net.addDocker('user_leg3',
                      ip='192.168.5.13/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD),
        net.addDocker('user_leg4',
                      ip='192.168.6.14/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD),
        net.addDocker('user_leg5',
                      ip='192.168.6.15/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD),
        net.addDocker('user_leg6',
                      ip='192.168.7.16/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD),
        net.addDocker('user_leg7',
                      ip='192.168.7.17/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD),
        net.addDocker('user_leg8',
                      ip='192.168.8.18/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD),
        net.addDocker('user_leg9',
                      ip='192.168.8.19/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD),
        net.addDocker('user_leg10',
                      ip='192.168.9.71/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD),
        net.addDocker('user_leg11',
                      ip='192.168.9.72/16',
                      dimage=DI_USER,
                      mem_limit=MEM_USER,
                      dmcd=USER_CMD)
    ]

    # --------------------------------------
    #       SERVER: Apache 2.4
    # --------------------------------------

    vict = [
        net.addDocker('vict0',
                      ip='192.168.10.5/16',
                      dimage=DI_SERVER,
                      mem_limit=MEM_SERVER,
                      dmcd='httpd-foreground'),
        net.addDocker('vict1',
                      ip='192.168.11.50/16',
                      dimage=DI_SERVER,
                      mem_limit=MEM_SERVER,
                      dmcd='httpd-foreground'),
        net.addDocker('vict2',
                      ip='192.168.11.51/16',
                      dimage=DI_SERVER,
                      mem_limit=MEM_SERVER,
                      dmcd='httpd-foreground')
    ]

    # --------------------------------------
    #       BOT: Ubuntu trustu
    # --------------------------------------

    bots = [
        net.addDocker('bot0',
                      ip='192.168.4.20/16',
                      dimage=DI_BOT,
                      mem_limit=MEM_BOT),
        net.addDocker('bot1',
                      ip='192.168.5.21/16',
                      dimage=DI_BOT,
                      mem_limit=MEM_BOT),
        net.addDocker('bot2',
                      ip='192.168.6.22/16',
                      dimage=DI_BOT,
                      mem_limit=MEM_BOT),
        net.addDocker('bot3',
                      ip='192.168.7.23/16',
                      dimage=DI_BOT,
                      mem_limit=MEM_BOT),
        net.addDocker('bot4',
                      ip='192.168.8.24/16',
                      dimage=DI_BOT,
                      mem_limit=MEM_BOT),
        net.addDocker('bot5',
                      ip='192.168.9.25/16',
                      dimage=DI_BOT,
                      mem_limit=MEM_BOT),
        net.addDocker('bot6',
                      ip='192.168.5.26/16',
                      dimage=DI_BOT,
                      mem_limit=MEM_BOT),
        net.addDocker('bot7',
                      ip='192.168.8.27/16',
                      dimage=DI_BOT,
                      mem_limit=MEM_BOT),
    ]

    # ############################################
    #     IDS ADD NETS ONOS
    # ############################################
    commands.getoutput(NET_CMD % "mn.ids1")
    commands.getoutput(NET_CMD % "mn.ids2")
    commands.getoutput(NET_CMD % "mn.ids3")
    commands.getoutput(NET_CMD % "mn.ids4")

    # ############################################
    #               Switches
    # ############################################

    logger.info('Adding switches')
    # Core
    s1 = net.addSwitch('s1')
    s2 = net.addSwitch('s2')
    # Border
    s3 = net.addSwitch('s3')
    # Distribution
    s4 = net.addSwitch('s4')
    s5 = net.addSwitch('s5')
    s6 = net.addSwitch('s6')
    s7 = net.addSwitch('s7')
    # Service
    s8 = net.addSwitch('s8')
    s12 = net.addSwitch('s12')
    # Access
    s9 = net.addSwitch('s9')
    s10 = net.addSwitch('s10')
    s11 = net.addSwitch('s11')
    s13 = net.addSwitch('s13')
    s14 = net.addSwitch('s14')
    s15 = net.addSwitch('s15')

    # ############################################
    #               Links
    # ############################################
    logger.info('Creating links')

    net.addLink(s3, s1, bw=BW_CORE_TO_CORE)  # BW [Mbits / s]
    net.addLink(s3, s2, bw=BW_CORE_TO_CORE)

    net.addLink(s2, s1, bw=BW_CORE_TO_CORE)  # BW [Mbits / s]

    net.addLink(s5, s4, bw=BW_DISTRIBUTION_TO_DISTRIBUTION)
    net.addLink(s1, s5, bw=BW_CORE_TO_DISTRIBUTION)
    net.addLink(s2, s5, bw=BW_CORE_TO_DISTRIBUTION)
    net.addLink(s1, s4, bw=BW_CORE_TO_DISTRIBUTION)
    net.addLink(s2, s4, bw=BW_CORE_TO_DISTRIBUTION)

    net.addLink(s6, s7, bw=BW_DISTRIBUTION_TO_DISTRIBUTION)
    net.addLink(s1, s7, bw=BW_CORE_TO_DISTRIBUTION)
    net.addLink(s2, s7, bw=BW_CORE_TO_DISTRIBUTION)
    net.addLink(s1, s6, bw=BW_CORE_TO_DISTRIBUTION)
    net.addLink(s2, s6, bw=BW_CORE_TO_DISTRIBUTION)

    net.addLink(s8, s4, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s9, s4, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s10, s4, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s11, s4, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s8, s5, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s9, s5, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s10, s5, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s11, s5, bw=BW_DISTRIBUTION_TO_EDGE)

    net.addLink(s12, s6, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s13, s6, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s14, s6, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s15, s6, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s12, s7, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s13, s7, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s14, s7, bw=BW_DISTRIBUTION_TO_EDGE)
    net.addLink(s15, s7, bw=BW_DISTRIBUTION_TO_EDGE)

    net.addLink(vict[0], s8, bw=BW_SERVER)
    net.addLink(vict[1], s12, bw=BW_SERVER)
    net.addLink(vict[2], s12, bw=BW_SERVER)  # Corregir archivo snort.conf"""

    net.addLink(ids[0], s4, bw=BW_IDS)
    net.addLink(ids[1], s5, bw=BW_IDS)
    net.addLink(ids[2], s6, bw=BW_IDS)
    net.addLink(ids[3], s7, bw=BW_IDS)

    net.addLink(bots[0], s9, bw=BW_CLIENT)
    net.addLink(bots[1], s10, bw=BW_CLIENT)
    net.addLink(bots[2], s11, bw=BW_CLIENT)
    net.addLink(bots[3], s13, bw=BW_CLIENT)
    net.addLink(bots[4], s14, bw=BW_CLIENT)
    net.addLink(bots[5], s15, bw=BW_CLIENT)

    net.addLink(bots[6], s10, bw=BW_CLIENT)
    net.addLink(bots[7], s14, bw=BW_CLIENT)

    net.addLink(users[0], s9, bw=BW_CLIENT)
    net.addLink(users[1], s9, bw=BW_CLIENT)
    net.addLink(users[2], s10, bw=BW_CLIENT)
    net.addLink(users[3], s10, bw=BW_CLIENT)
    net.addLink(users[4], s11, bw=BW_CLIENT)
    net.addLink(users[5], s11, bw=BW_CLIENT)
    net.addLink(users[6], s13, bw=BW_CLIENT)
    net.addLink(users[7], s13, bw=BW_CLIENT)
    net.addLink(users[8], s14, bw=BW_CLIENT)
    net.addLink(users[9], s14, bw=BW_CLIENT)
    net.addLink(users[10], s15, bw=BW_CLIENT)
    net.addLink(users[11], s15, bw=BW_CLIENT)

    # ############################################
    #        Conatainers Comands
    # ############################################

    for i in range(users.__len__()):
        users[i].cmd('ip route add 192.168.0.0/16 dev user_leg' + str(i) +
                     '-eth0')
    for i in range(bots.__len__()):
        bots[i].cmd('ip route add 192.168.0.0/16 dev bot' + str(i) + '-eth0')

    for i in range(ids.__len__()):
        ids[i].cmd('ip route add 192.168.0.0/16 dev ids' + str(i + 1) +
                   '-eth0')
    for i in range(vict.__len__()):
        vict[i].cmd('ip route add 192.168.0.0/16 dev vict' + str(i) + '-eth0')

    # ############################################
    #        START NETWORK
    # ############################################

    logger.info('Starting network')
    net.start()

    # Run httpd-foreground command
    for i in range(vict.__len__()):
        vict[i].start()
    # Run Snort Sniffer
    for i in range(ids.__len__()):
        ids[i].start()

    logger.info('Testing connectivity')
    net.pingAll()

    # Run init Cmd
    for i in range(users.__len__()):
        users[i].start()

    logger.info('Running CLI')
    CLI(net)

    # ############################################
    #               END
    # ############################################

    logger.info('Stopping network')
    net.stop()
    d = net.addDocker(container_id,
                      ip=container_ip,
                      volumes=[homedir],
                      dimage="alfa/vms/video_qrcode_detection",
                      dcmd="python /root/video_qrcode_detection/v2.py",
                      ports=[(5000, 'udp')],
                      publish_all_ports=True)

    # dcmd="python /root/video_qrcode_detection/v2.py > /vol1/latencia/logs/"+str(i)+".txt",

    info('*** Creating links\n')
    net.addLink(s1, d, cls=TCLink, bw=100, delay=str(lat) + 'ms')
    net.start()

    # info('*** Testing connectivity\n')
    net.pingAll()

    # time.sleep(5)

    line_out += "{}\t{}\t{}\t{}\n".format(container_id, container_ip, lat,
                                          time.time())

    cmd_send = '/vol1/latencia/send_video.sh ' + container_ip
    print(cmd_send)
    d0.cmd(cmd_send)
    # net.removeDocker(d)

info('*** End test\n')

print("ID\tIP\tLatencia\tStart Time")
print(line_out)
예제 #8
0
def run():
    "Test linux router"
    net = Containernet ( controller=Controller )  # controller is used by s1-s3
    net.addController('c0', port=6654)

    defaultIP = '10.0.0.1/24'  # IP address for r0-eth1
    info('*** Adding routers\n')
    r1 = net.addHost('r1', cls=LinuxRouter, ip='10.0.0.1/24')
    r2 = net.addHost('r2', cls=LinuxRouter, ip='10.1.0.1/24')
    # r3 = net.addHost('r3', cls=LinuxRouter, ip='10.2.0.1/24')

    info('*** Adding switches\n')
    s1, s2, s3 = [net.addSwitch(s) for s in ('s1', 's2', 's3')]

    info('*** Adding host-switch links\n')
    net.addLink(s1, r1, intfName2='r1-eth1',
                 params2={'ip': '10.0.0.1/24'})

    net.addLink(s2, r2, intfName2='r2-eth1',
                 params2={'ip': '10.1.0.1/24'})

    # net.addLink(s3, r3, intfName2='r3-eth1',
    #              params2={'ip': '10.2.0.1/24'})

    info('*** 1) Adding switch-switch link\n')
    net.addLink(r1, r2, intfName1='r1-eth2', intfName2='r2-eth2', params1={'ip': '10.100.0.1/24'},
                params2={'ip': '10.100.0.2/24'})
    # net.addLink(r1, r2, intfName1='r1-eth2', intfName2='r2-eth2', params1={'ip': '10.100.0.1/24'}, params2={'ip': '10.100.0.2/24'})
    # info('*** 2) Adding switch-switch link\n')
    # net.addLink(r2, r3, intfName1='r2-eth3', intfName2='r3-eth2', params1={'ip': '10.2.0.1/24'},
    #             params2={'ip': '10.1.0.1/24'})
    # net.addLink(r2, r3, intfName1='r2-eth3', intfName2='r3-eth2', params1={'ip': '10.200.0.1/24'}, params2={'ip': '10.200.0.2/24'})
    # info('*** 3) Adding switch-switch link\n')
    # info('*** 3) Adding switch-switch link\n')
    # net.addLink(r1, r3, intfName1='r1-eth3', intfName2='r3-eth3', params1={'ip': '10.2.0.1/24'},
    #             params2={'ip': '10.0.0.1/24'})
    # net.addLink(r1, r3, intfName1='r1-eth3', intfName2='r3-eth3', params1={'ip': '10.300.0.1/24'}, params2={'ip': '10.300.0.2/24'})

    r1.cmd("ip route add 10.1.0.0/24 via 10.100.0.1")
    r2.cmd("ip route add 10.0.0.0/24 via 10.100.0.2")
    r1.cmd("echo 1 > /proc/sys/net/ipv4/ip_forward")
    r2.cmd("echo 1 > /proc/sys/net/ipv4/ip_forward")
    #
    # r2.cmd("ip route add 10.2.0.0/24 via 10.200.0.1")
    # r3.cmd("ip route add 10.1.0.0/24 via 10.200.0.2")
    #
    # r1.cmd("ip route add 10.2.0.0/24 via 10.300.0.1")
    # r3.cmd("ip route add 10.0.0.0/24 via 10.300.0.2")


    d1 = net.addHost(name='d1', ip='10.0.0.251/24', defaultRoute='via 10.0.0.1')
    d2 = net.addHost(name='d2', ip='10.1.0.252/24', defaultRoute='via 10.1.0.1')
    # d3 = net.addHost(name='d3', ip='10.3.0.253/24', defaultRoute='via 10.2.0.1')
    # d1 = net.addDocker(name='d1', ip='10.0.0.251/24', defaultRoute='via 10.0.0.1', ports=[1883], port_bindings={1883: 1883}, dimage=IMAGE_NAME,
    #                environment={"EMQX_NAME": "docker1",
    #                             "EMQX_HOST": "10.0.0.251",
    #                             "EMQX_NODE__DIST_LISTEN_MAX": 6379,
    #                             "EMQX_LISTENER__TCP__EXTERNAL": 1883,
    #                             "EMQX_CLUSTER__DISCOVERY": "static",
    #                             "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"})
    #
    # d2 = net.addDocker(name='d2', ip='10.1.0.252/24', defaultRoute='via 10.1.0.1', ports=[1883], port_bindings={1883: 1884}, dimage=IMAGE_NAME,
    #                    environment={"EMQX_NAME": "docker2",
    #                                 "EMQX_HOST": "10.1.0.252",
    #                                 "EMQX_NODE__DIST_LISTEN_MAX": 6379,
    #                                 "EMQX_LISTENER__TCP__EXTERNAL": 1883,
    #                                 "EMQX_CLUSTER__DISCOVERY": "static",
    #                                 "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"})
    #
    # d3 = net.addDocker(name='d3', ip='10.2.0.253/24', defaultRoute='via 10.2.0.1', ports=[1883],
    #                    port_bindings={1883: 1885}, dimage=IMAGE_NAME,
    #                    environment={"EMQX_NAME": "docker3",
    #                                 "EMQX_HOST": "10.2.0.253",
    #                                 "EMQX_NODE__DIST_LISTEN_MAX": 6379,
    #                                 "EMQX_LISTENER__TCP__EXTERNAL": 1883,
    #                                 "EMQX_CLUSTER__DISCOVERY": "static",
    #                                 "EMQX_CLUSTER__STATIC__SEEDS": "[email protected]"})

    for d, s in [(d1, s1), (d2, s2)]:
        info(net.addLink(d, s))

    # info(net.addLink(d1, s1, cls=TCLink, delay='10ms', intfName2='d1-eth1'))
    # info(net.addLink(d2, s2, cls=TCLink, delay='10ms', intfName2='d2-eth1'))
    # info(net.addLink(d3, s3, cls=TCLink, delay='10ms', intfName2='d3-eth1'))

    info('*** Starting network\n')
    net.start()
    net.staticArp()

    info('*** Routing Table on Router:\n')
    print((net['r1'].cmd('route')))

    info('*** Routing Table on Router:\n')
    print((net['r2'].cmd('route')))

    # info('*** Routing Table on Router:\n')
    # print((net['r3'].cmd('route')))

    info('*** Testing connectivity\n')
    net.pingAll()
    # net.ping([r1, r2])
    info('*** Starting brokers\n')
    # d1.start()
    # d2.start()
    # d3.start()

    CLI(net)
    net.stop()