from mininet.net import Mininet from mininet.node import RemoteController, OVSSwitch, OVSKernelSwitch from mininet.cli import CLI from mininet.log import setLogLevel, info import time # Web server code ----- WEB_SERVER = ''' import json from flask import Flask, request app = Flask(__name__) @app.route('/') def cip(): return json.dumps({ "clientIP": "%s", }) if __name__ == '__main__': app.run(debug=False, port=%d, host="0.0.0.0") ''' # ----------------------- def run_webserver(node, port, name): node.cmd('web=`cat < /dev/null 2>&1 &'.format(WEB_SERVER % (name, port))) def ExampleNetwork(): net = Mininet(switch=OVSSwitch, build=False, topo=None) info("*** Adding Controllers\n") ctrl = net.addController("ctrl", controller=RemoteController, port=6633) # obfuscator controller info("*** Adding Switches\n") s1 = net.addSwitch("s1", cls=OVSKernelSwitch, dpid="0000000000000001") info("*** Adding Hosts\n") c1 = net.addHost("c1") plc = net.addHost("plc") hp1 = net.addHost("hp1") hp2 = net.addHost("hp2") info("*** Adding Links\n") net.addLink(c1, s1) net.addLink(plc, s1) net.addLink(hp1, s1) net.addLink(hp2, s1) info("*** Building Network\n") net.build() info("*** Setting Host Interface Values\n") c1.intf("c1-eth0").setIP("10.0.0.1", 24) c1.intf("c1-eth0").setMAC("00:aa:aa:aa:aa:aa") plc.intf("plc-eth0").setIP("10.0.0.2", 24) plc.intf("plc-eth0").setMAC("00:aa:aa:aa:aa:bb") hp1.intf("hp1-eth0").setIP("10.0.0.3", 24) hp1.intf("hp1-eth0").setMAC("00:aa:aa:aa:aa:cc") hp2.intf("hp2-eth0").setIP("10.0.0.4", 24) hp2.intf("hp2-eth0").setMAC("00:aa:aa:aa:aa:dd") info("*** Setting Switch Interface Values\n") s1.intf("s1-eth1").setMAC("00:cc:cc:cc:cc:aa") s1.intf("s1-eth2").setMAC("00:cc:cc:cc:cc:bb") s1.intf("s1-eth3").setMAC("00:cc:cc:cc:cc:cc") s1.intf("s1-eth4").setMAC("00:cc:cc:cc:cc:dd") for controller in net.controllers: controller.start() s1.start([ctrl]) info("*** Starting Web Server...\n") run_webserver(plc, 80, "plc") run_webserver(plc, 8080, "plc") run_webserver(plc, 81, "plc") run_webserver(plc, 82, "plc") run_webserver(plc, 83, "plc") run_webserver(hp1, 80, "hp1") run_webserver(hp2, 8080, "hp2") time.sleep(3) info("*** Running CLI\n") CLI(net) info("*** Stopping Network\n") net.stop() if __name__ == "__main__": setLogLevel("info") # for CLI output ExampleNetwork()