From 3e0a02f677a8bce71a6c214f40693d8593e0cf60 Mon Sep 17 00:00:00 2001
From: Sebastian Rieger <sebastian.rieger@informatik.hs-fulda.de>
Date: Tue, 6 Dec 2016 00:27:29 +0100
Subject: [PATCH] fixed cloud config file generation and added tcp download
 client/server

---
 .../kommprot-lab3-clientserverapp.virl        | 390 +++++++++++++++---
 1 file changed, 324 insertions(+), 66 deletions(-)

diff --git a/GIT-VIRL-HS-Fulda/Kommunikationsnetze und -protokolle (Bachelor AI)/kommprot-lab3-clientserverapp.virl b/GIT-VIRL-HS-Fulda/Kommunikationsnetze und -protokolle (Bachelor AI)/kommprot-lab3-clientserverapp.virl
index 53ad7fb..43c82f8 100644
--- a/GIT-VIRL-HS-Fulda/Kommunikationsnetze und -protokolle (Bachelor AI)/kommprot-lab3-clientserverapp.virl	
+++ b/GIT-VIRL-HS-Fulda/Kommunikationsnetze und -protokolle (Bachelor AI)/kommprot-lab3-clientserverapp.virl	
@@ -9,7 +9,7 @@
             <entry key="config" type="String">#cloud-config&#xD;
 bootcmd:&#xD;
 - ln -s -t /etc/rc.d /etc/rc.local&#xD;
-hostname: client&#xD;
+hostname: client1&#xD;
 manage_etc_hosts: true&#xD;
 runcmd:&#xD;
 - systemctl start rc-local&#xD;
@@ -46,65 +46,88 @@ write_files:&#xD;
     #!/bin/sh&#xD;
     ifconfig eth1 up 10.0.0.20 netmask 255.255.0.0&#xD;
     route add -host 192.168.0.1 gw 10.0.0.1 dev eth1&#xD;
-    route add -net 10.0.0.0/16 gw 10.0.0.1 dev eth1&#xD;
     route add default gw 10.0.0.1&#xD;
     echo "nameserver 8.8.8.8" &gt;/etc/resolv.conf&#xD;
+    chown -R cisco:cisco /home/cisco&#xD;
     exit 0&#xD;
-- path: /home/cisco/udpserver.py&#xD;
-  owner: cisco:cisco&#xD;
-  permissions: '0755'&#xD;
-  content: |-&#xD;
+- path: /home/cisco/udp-client.py&#xD;
+  content: |&#xD;
     #!/usr/bin/python&#xD;
     from socket import *&#xD;
-&#xD;
+    &#xD;
+    # Server-Adresse und Port&#xD;
+    serverName = "localhost"&#xD;
+    serverPort = 17000&#xD;
+    &#xD;
+    # Client Socket (IP, UDP) oeffnen&#xD;
+    clientSocket = socket(AF_INET, SOCK_DGRAM)&#xD;
+    &#xD;
+    # Nachricht vom Benutzer erfragen und versenden&#xD;
+    message = raw_input("UDP Nachricht in Kleinbuchstaben eingeben:")&#xD;
+    clientSocket.sendto(message,(serverName, serverPort))&#xD;
+            &#xD;
+    # Antwort des Server aus Socket lesen und ausgeben&#xD;
+    modifiedMessage, serverAddress = clientSocket.recvfrom(2048)&#xD;
+    print "Antwort des Servers: ", modifiedMessage&#xD;
+    raw_input("Fertig...")&#xD;
+    &#xD;
+    # Verbindung schliessen&#xD;
+    clientSocket.close()&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/udp-server.py&#xD;
+  content: |&#xD;
+    #!/usr/bin/python&#xD;
+    from socket import *&#xD;
+    &#xD;
     # UDP Port auf dem der Server lauschen soll...&#xD;
     serverPort = 17000&#xD;
-&#xD;
+    &#xD;
     # Server-Socket als Internet (INET) UDP (DGRAM) erzeugen und an o.g. Port binden&#xD;
     serverSocket = socket(AF_INET, SOCK_DGRAM)&#xD;
     serverSocket.bind(("", serverPort))&#xD;
     print "UDP Server ist bereit fuer den Empfang von Daten..."&#xD;
-&#xD;
+    &#xD;
     # Endlosschleife&#xD;
     while 1:&#xD;
-        # Eingehende Nachrichten von Clients empfangen&#xD;
-        message, clientAddress = serverSocket.recvfrom(2048)&#xD;
-        # Alle Buchstaben der Nachricht in Grossbuchstaben umwandeln und an den&#xD;
-        # Client zuruecksenden&#xD;
-        modifiedMessage = message.upper()&#xD;
-        serverSocket.sendto(modifiedMessage, clientAddress)&#xD;
-- path: /home/cisco/udpclient.py&#xD;
-  owner: cisco:cisco&#xD;
-  permissions: '0755'&#xD;
-  content: |-&#xD;
+      # Eingehende Nachrichten von Clients empfangen&#xD;
+      message, clientAddress = serverSocket.recvfrom(2048)&#xD;
+      # Alle Buchstaben der Nachricht in Grossbuchstaben umwandeln und an den&#xD;
+      # Client zuruecksenden&#xD;
+      modifiedMessage = message.upper()&#xD;
+      serverSocket.sendto(modifiedMessage, clientAddress)&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/tcp-client.py&#xD;
+  content: |&#xD;
     #!/usr/bin/python&#xD;
     from socket import *&#xD;
-&#xD;
-    # Server-Adresse und Port&#xD;
+    &#xD;
+    # Serveradresse und TCP Port auf den der Server hoert...&#xD;
     serverName = "localhost"&#xD;
     serverPort = 17000&#xD;
-&#xD;
-    # Client Socket (IP, UDP) oeffnen&#xD;
-    clientSocket = socket(AF_INET, SOCK_DGRAM)&#xD;
-&#xD;
-    # Nachricht vom Benutzer erfragen und versenden&#xD;
-    message = raw_input("UDP Nachricht in Kleinbuchstaben eingeben:")&#xD;
-    clientSocket.sendto(message,(serverName, serverPort))&#xD;
-&#xD;
-    # Antwort des Server aus Socket lesen und ausgeben&#xD;
-    modifiedMessage, serverAddress = clientSocket.recvfrom(2048)&#xD;
-    print "Antwort des Servers: ", modifiedMessage&#xD;
+    # Socket fuer IP (INET) und TCP (STREAM) konfigurieren&#xD;
+    clientSocket = socket(AF_INET, SOCK_STREAM)&#xD;
+    clientSocket.connect((serverName,serverPort))&#xD;
+    &#xD;
+    # Nachricht vom Benutzer abfragen und an den Server senden&#xD;
+    sentence = raw_input("TCP Nachricht in Kleinbuchstaben eingeben:")&#xD;
+    clientSocket.send(sentence)&#xD;
+    &#xD;
+    # Antwort des Servers ausgeben&#xD;
+    modifiedSentence = clientSocket.recv(1024)&#xD;
+    print "Antwort des Servers:", modifiedSentence&#xD;
     raw_input("Fertig...")&#xD;
-&#xD;
+    &#xD;
     # Verbindung schliessen&#xD;
     clientSocket.close()&#xD;
-- path: /home/cisco/tcpserver.py&#xD;
-  owner: cisco:cisco&#xD;
-  permissions: '0755'&#xD;
-  content: |-&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/tcp-server.py&#xD;
+  content: |&#xD;
     #!/usr/bin/python&#xD;
     from socket import *&#xD;
-&#xD;
+    &#xD;
     # TCP Port auf dem der Server lauschen soll...&#xD;
     serverPort = 17000&#xD;
     # Server-Socket als Internet (INET) TCP (STREAM) erzeugen und an o.g. Port binden&#xD;
@@ -112,43 +135,73 @@ write_files:&#xD;
     serverSocket.bind(("",serverPort))&#xD;
     serverSocket.listen(1)&#xD;
     print "TCP Server ist bereit fuer den Empfang von Daten..."&#xD;
-&#xD;
+    &#xD;
     # Endlosschleife&#xD;
     while 1:&#xD;
-        # Eingehende Nachrichten akzeptieren und von Clients empfangen&#xD;
-        connectionSocket, addr = serverSocket.accept()&#xD;
-        sentence = connectionSocket.recv(1024)&#xD;
-        # Alle Buchstaben der Nachricht in Grossbuchstaben umwandeln und an den&#xD;
-        # Client zuruecksenden&#xD;
-        capitalizedSentence = sentence.upper()&#xD;
-        connectionSocket.send(capitalizedSentence)&#xD;
-        # Verbindung schliessen&#xD;
-        connectionSocket.close()&#xD;
-- path: /home/cisco/tcpclient.py&#xD;
-  owner: cisco:cisco&#xD;
-  permissions: '0755'&#xD;
-  content: |-&#xD;
+      # Eingehende Nachrichten akzeptieren und von Clients empfangen&#xD;
+      connectionSocket, addr = serverSocket.accept()&#xD;
+      sentence = connectionSocket.recv(1024)&#xD;
+      # Alle Buchstaben der Nachricht in Grossbuchstaben umwandeln und an den&#xD;
+      # Client zuruecksenden&#xD;
+      capitalizedSentence = sentence.upper()&#xD;
+      connectionSocket.send(capitalizedSentence)&#xD;
+      # Verbindung schliessen&#xD;
+      connectionSocket.close()&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/tcpdownload-client.py&#xD;
+  content: |&#xD;
     #!/usr/bin/python&#xD;
     from socket import *&#xD;
-&#xD;
+    import time&#xD;
+    &#xD;
     # Serveradresse und TCP Port auf den der Server hoert...&#xD;
-    serverName = "localhost"&#xD;
+    serverName = "10.0.0.30"&#xD;
     serverPort = 17000&#xD;
     # Socket fuer IP (INET) und TCP (STREAM) konfigurieren&#xD;
     clientSocket = socket(AF_INET, SOCK_STREAM)&#xD;
     clientSocket.connect((serverName,serverPort))&#xD;
-&#xD;
-    # Nachricht vom Benutzer abfragen und an den Server senden&#xD;
-    sentence = raw_input("TCP Nachricht in Kleinbuchstaben eingeben:")&#xD;
-    clientSocket.send(sentence)&#xD;
-&#xD;
+    &#xD;
     # Antwort des Servers ausgeben&#xD;
-    modifiedSentence = clientSocket.recv(1024)&#xD;
-    print "Antwort des Servers:", modifiedSentence&#xD;
+    length = 0&#xD;
+    start = time.time()&#xD;
+    while 1:&#xD;
+      data = clientSocket.recv(1024)&#xD;
+      if not data:&#xD;
+        break&#xD;
+      length += len(data)&#xD;
+    elapsed = time.time() - start&#xD;
+    print str(length) + " Bytes geladen in " + str(elapsed) + " secs (" + str(length / elapsed) + " bytes/s)"&#xD;
     raw_input("Fertig...")&#xD;
-&#xD;
+    &#xD;
     # Verbindung schliessen&#xD;
     clientSocket.close()&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/tcpdownload-server.py&#xD;
+  content: |&#xD;
+    #!/usr/bin/python&#xD;
+    from socket import *&#xD;
+    &#xD;
+    # TCP Port auf dem der Server lauschen soll...&#xD;
+    serverPort = 17000&#xD;
+    # Server-Socket als Internet (INET) TCP (STREAM) erzeugen und an o.g. Port binden&#xD;
+    serverSocket = socket(AF_INET,SOCK_STREAM)&#xD;
+    serverSocket.bind(("",serverPort))&#xD;
+    serverSocket.listen(1)&#xD;
+    downloadSize = raw_input("Download-Groesse: ")&#xD;
+    print "TCP Server ist bereit fuer den Download..."&#xD;
+    &#xD;
+    # Endlosschleife&#xD;
+    while 1:&#xD;
+      # Eingehende Nachrichten akzeptieren und von Clients empfangen&#xD;
+      connectionSocket, addr = serverSocket.accept()&#xD;
+      # Bytes an Client zuruecksenden&#xD;
+      connectionSocket.send("a" * int(downloadSize))&#xD;
+      # Verbindung schliessen&#xD;
+      connectionSocket.close()&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
 </entry>
         </extensions>
         <interface id="0" name="eth1" ipv4="10.0.0.2" netPrefixLenV4="16"/>
@@ -158,7 +211,7 @@ write_files:&#xD;
             <entry key="config" type="String">#cloud-config&#xD;
 bootcmd:&#xD;
 - ln -s -t /etc/rc.d /etc/rc.local&#xD;
-hostname: server&#xD;
+hostname: server1&#xD;
 manage_etc_hosts: true&#xD;
 runcmd:&#xD;
 - systemctl start rc-local&#xD;
@@ -195,20 +248,225 @@ write_files:&#xD;
     #!/bin/sh&#xD;
     ifconfig eth1 up 10.0.0.30 netmask 255.255.0.0&#xD;
     route add -host 192.168.0.1 gw 10.0.0.1 dev eth1&#xD;
-    route add -net 10.0.0.0/16 gw 10.0.0.1 dev eth1&#xD;
     route add default gw 10.0.0.1&#xD;
     echo "nameserver 8.8.8.8" &gt;/etc/resolv.conf&#xD;
+    chown -R cisco:cisco /home/cisco&#xD;
     exit 0&#xD;
+- path: /home/cisco/udpclient.py&#xD;
+  content: |&#xD;
+    #!/usr/bin/python&#xD;
+    from socket import *&#xD;
+    &#xD;
+    # Server-Adresse und Port&#xD;
+    serverName = "localhost"&#xD;
+    serverPort = 17000&#xD;
+    &#xD;
+    # Client Socket (IP, UDP) oeffnen&#xD;
+    clientSocket = socket(AF_INET, SOCK_DGRAM)&#xD;
+    &#xD;
+    # Nachricht vom Benutzer erfragen und versenden&#xD;
+    message = raw_input("UDP Nachricht in Kleinbuchstaben eingeben:")&#xD;
+    clientSocket.sendto(message,(serverName, serverPort))&#xD;
+            &#xD;
+    # Antwort des Server aus Socket lesen und ausgeben&#xD;
+    modifiedMessage, serverAddress = clientSocket.recvfrom(2048)&#xD;
+    print "Antwort des Servers: ", modifiedMessage&#xD;
+    raw_input("Fertig...")&#xD;
+    &#xD;
+    # Verbindung schliessen&#xD;
+    clientSocket.close()&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/udpserver.py&#xD;
+  content: |&#xD;
+    #!/usr/bin/python&#xD;
+    from socket import *&#xD;
+    &#xD;
+    # UDP Port auf dem der Server lauschen soll...&#xD;
+    serverPort = 17000&#xD;
+    &#xD;
+    # Server-Socket als Internet (INET) UDP (DGRAM) erzeugen und an o.g. Port binden&#xD;
+    serverSocket = socket(AF_INET, SOCK_DGRAM)&#xD;
+    serverSocket.bind(("", serverPort))&#xD;
+    print "UDP Server ist bereit fuer den Empfang von Daten..."&#xD;
+    &#xD;
+    # Endlosschleife&#xD;
+    while 1:&#xD;
+      # Eingehende Nachrichten von Clients empfangen&#xD;
+      message, clientAddress = serverSocket.recvfrom(2048)&#xD;
+      # Alle Buchstaben der Nachricht in Grossbuchstaben umwandeln und an den&#xD;
+      # Client zuruecksenden&#xD;
+      modifiedMessage = message.upper()&#xD;
+      serverSocket.sendto(modifiedMessage, clientAddress)&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/tcpclient.py&#xD;
+  content: |&#xD;
+    #!/usr/bin/python&#xD;
+    from socket import *&#xD;
+    &#xD;
+    # Serveradresse und TCP Port auf den der Server hoert...&#xD;
+    serverName = "localhost"&#xD;
+    serverPort = 17000&#xD;
+    # Socket fuer IP (INET) und TCP (STREAM) konfigurieren&#xD;
+    clientSocket = socket(AF_INET, SOCK_STREAM)&#xD;
+    clientSocket.connect((serverName,serverPort))&#xD;
+    &#xD;
+    # Nachricht vom Benutzer abfragen und an den Server senden&#xD;
+    sentence = raw_input("TCP Nachricht in Kleinbuchstaben eingeben:")&#xD;
+    clientSocket.send(sentence)&#xD;
+    &#xD;
+    # Antwort des Servers ausgeben&#xD;
+    modifiedSentence = clientSocket.recv(1024)&#xD;
+    print "Antwort des Servers:", modifiedSentence&#xD;
+    raw_input("Fertig...")&#xD;
+    &#xD;
+    # Verbindung schliessen&#xD;
+    clientSocket.close()&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/tcpserver.py&#xD;
+  content: |&#xD;
+    #!/usr/bin/python&#xD;
+    from socket import *&#xD;
+    &#xD;
+    # TCP Port auf dem der Server lauschen soll...&#xD;
+    serverPort = 17000&#xD;
+    # Server-Socket als Internet (INET) TCP (STREAM) erzeugen und an o.g. Port binden&#xD;
+    serverSocket = socket(AF_INET,SOCK_STREAM)&#xD;
+    serverSocket.bind(("",serverPort))&#xD;
+    serverSocket.listen(1)&#xD;
+    print "TCP Server ist bereit fuer den Empfang von Daten..."&#xD;
+    &#xD;
+    # Endlosschleife&#xD;
+    while 1:&#xD;
+      # Eingehende Nachrichten akzeptieren und von Clients empfangen&#xD;
+      connectionSocket, addr = serverSocket.accept()&#xD;
+      sentence = connectionSocket.recv(1024)&#xD;
+      # Alle Buchstaben der Nachricht in Grossbuchstaben umwandeln und an den&#xD;
+      # Client zuruecksenden&#xD;
+      capitalizedSentence = sentence.upper()&#xD;
+      connectionSocket.send(capitalizedSentence)&#xD;
+      # Verbindung schliessen&#xD;
+      connectionSocket.close()&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/tcpclient-download.py&#xD;
+  content: |&#xD;
+    #!/usr/bin/python&#xD;
+    from socket import *&#xD;
+    import time&#xD;
+    &#xD;
+    # Serveradresse und TCP Port auf den der Server hoert...&#xD;
+    serverName = "10.0.0.30"&#xD;
+    serverPort = 17000&#xD;
+    # Socket fuer IP (INET) und TCP (STREAM) konfigurieren&#xD;
+    clientSocket = socket(AF_INET, SOCK_STREAM)&#xD;
+    clientSocket.connect((serverName,serverPort))&#xD;
+    &#xD;
+    # Antwort des Servers ausgeben&#xD;
+    length = 0&#xD;
+    start = time.time()&#xD;
+    while 1:&#xD;
+      data = clientSocket.recv(1024)&#xD;
+      if not data:&#xD;
+        break&#xD;
+      length += len(data)&#xD;
+    elapsed = time.time() - start&#xD;
+    print str(length) + " Bytes geladen in " + str(elapsed) + " secs (" + str(length / elapsed) + " bytes/s)"&#xD;
+    raw_input("Fertig...")&#xD;
+    &#xD;
+    # Verbindung schliessen&#xD;
+    clientSocket.close()&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/tcpserver-download.py&#xD;
+  content: |&#xD;
+    #!/usr/bin/python&#xD;
+    from socket import *&#xD;
+    &#xD;
+    # TCP Port auf dem der Server lauschen soll...&#xD;
+    serverPort = 17000&#xD;
+    # Server-Socket als Internet (INET) TCP (STREAM) erzeugen und an o.g. Port binden&#xD;
+    serverSocket = socket(AF_INET,SOCK_STREAM)&#xD;
+    serverSocket.bind(("",serverPort))&#xD;
+    serverSocket.listen(1)&#xD;
+    downloadSize = raw_input("Download-Groesse: ")&#xD;
+    print "TCP Server ist bereit fuer den Download..."&#xD;
+    &#xD;
+    # Endlosschleife&#xD;
+    while 1:&#xD;
+      # Eingehende Nachrichten akzeptieren und von Clients empfangen&#xD;
+      connectionSocket, addr = serverSocket.accept()&#xD;
+      # Bytes an Client zuruecksenden&#xD;
+      connectionSocket.send("a" * int(downloadSize))&#xD;
+      # Verbindung schliessen&#xD;
+      connectionSocket.close()&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/tcpdownload-client.py&#xD;
+  content: |&#xD;
+    #!/usr/bin/python&#xD;
+    from socket import *&#xD;
+    import time&#xD;
+    &#xD;
+    # Serveradresse und TCP Port auf den der Server hoert...&#xD;
+    serverName = "10.0.0.30"&#xD;
+    serverPort = 17000&#xD;
+    # Socket fuer IP (INET) und TCP (STREAM) konfigurieren&#xD;
+    clientSocket = socket(AF_INET, SOCK_STREAM)&#xD;
+    clientSocket.connect((serverName,serverPort))&#xD;
+    &#xD;
+    # Antwort des Servers ausgeben&#xD;
+    length = 0&#xD;
+    start = time.time()&#xD;
+    while 1:&#xD;
+      data = clientSocket.recv(1024)&#xD;
+      if not data:&#xD;
+        break&#xD;
+      length += len(data)&#xD;
+    elapsed = time.time() - start&#xD;
+    print str(length) + " Bytes geladen in " + str(elapsed) + " secs (" + str(length / elapsed) + " bytes/s)"&#xD;
+    raw_input("Fertig...")&#xD;
+    &#xD;
+    # Verbindung schliessen&#xD;
+    clientSocket.close()&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
+- path: /home/cisco/tcpdownload-server.py&#xD;
+  content: |&#xD;
+    #!/usr/bin/python&#xD;
+    from socket import *&#xD;
+    &#xD;
+    # TCP Port auf dem der Server lauschen soll...&#xD;
+    serverPort = 17000&#xD;
+    # Server-Socket als Internet (INET) TCP (STREAM) erzeugen und an o.g. Port binden&#xD;
+    serverSocket = socket(AF_INET,SOCK_STREAM)&#xD;
+    serverSocket.bind(("",serverPort))&#xD;
+    serverSocket.listen(1)&#xD;
+    downloadSize = raw_input("Download-Groesse: ")&#xD;
+    print "TCP Server ist bereit fuer den Download..."&#xD;
+    &#xD;
+    # Endlosschleife&#xD;
+    while 1:&#xD;
+      # Eingehende Nachrichten akzeptieren und von Clients empfangen&#xD;
+      connectionSocket, addr = serverSocket.accept()&#xD;
+      # Bytes an Client zuruecksenden&#xD;
+      connectionSocket.send("a" * int(downloadSize))&#xD;
+      # Verbindung schliessen&#xD;
+      connectionSocket.close()&#xD;
+  owner: root:root&#xD;
+  permissions: '0777'&#xD;
 </entry>
         </extensions>
         <interface id="0" name="eth1" ipv4="10.0.0.3" netPrefixLenV4="16"/>
     </node>
-    <node name="switch1" type="SIMPLE" subtype="Unmanaged Switch" location="446,227">
+    <node name="switch1" type="SIMPLE" subtype="Unmanaged Switch" location="459,232">
         <interface id="0" name="link1"/>
         <interface id="1" name="link2"/>
         <interface id="2" name="link3"/>
     </node>
-    <node name="router1" type="SIMPLE" subtype="IOSv" location="446,106">
+    <node name="router1" type="SIMPLE" subtype="IOSv" location="459,111">
         <extensions>
             <entry key="AutoNetkit.mgmt_ip" type="string"></entry>
             <entry key="Auto-generate config" type="Boolean">false</entry>
-- 
GitLab