20TD02Y_CCNA_20TD02U - itnett/FTD02H-N GitHub Wiki

For å dekke temaet "Programmering" i din IT-drift og sikkerhet utdanning, kan vi lage en lab som dekker både teoretiske konsepter og praktiske ferdigheter. Her er en detaljert labbeskrivelse med bruk av Cisco-utstyret ditt for å simulere et nettverksmiljø, sammen med oppgaver som dekker alle læringsutbyttene.

Lab: Programmering i et Sikkerhetsmiljø

Mål

Denne labben har som mål å gi studentene praktisk erfaring med grunnleggende programmeringsteknikker, utvikling av brukergrensesnitt, kommunikasjon mellom programgrensesnitt (API), og grunnleggende sikkerhetspraksis i applikasjonsutvikling.

Utstyr og Verktøy

  • Cisco-rutere og -svitsjer for nettverksoppsett og overvåking
  • Servere/VM-er for å kjøre utviklingsmiljøer
  • Utviklingsverktøy: Python, Visual Studio Code, Postman, Docker
  • Nettverksovervåkingsverktøy: Wireshark, Cisco Prime
  • Simulerte IoT-enheter ved bruk av Cisco-sensorer og IoTSimulator

Oppgaver og Læringsutbytte

1. Programstrukturer og Datastrukturer

Oppgave:

  • Lag et Python-program som implementerer grunnleggende datastrukturer som lister, tupler, sett og ordbøker.
  • Bruk kontrollstrukturer (if-else, loops) for å manipulere datastrukturene.

Læringsutbytte:

  • Har kunnskap om grunnleggende programmering og programmeringsverktøy.
  • Kan skrive kode med variabeldeklarasjoner, kontrollstrukturer, løkker og funksjoner.

Kodeeksempel:

# Eksempel på datastruktur-manipulasjon
def main():
    liste = [1, 2, 3, 4, 5]
    sett = {1, 2, 3, 4, 5}
    ordbok = {"en": 1, "to": 2, "tre": 3}

    for nummer in liste:
        if nummer % 2 == 0:
            print(f"{nummer} er partall")

if __name__ == "__main__":
    main()

2. Funksjoner og Metoder

Oppgave:

  • Skriv et Python-program som inneholder flere funksjoner, inkludert en funksjon for å legge til to tall, en for å trekke fra, en for å multiplisere, og en for å dele.

Læringsutbytte:

  • Har kunnskap om grunnleggende programmeringsteknikker som variabeldeklarasjoner, kontrollstrukturer, løkker og funksjoner.

Kodeeksempel:

def legg_til(a, b):
    return a + b

def trekk_fra(a, b):
    return a - b

def multipliser(a, b):
    return a * b

def del_tall(a, b):
    if b != 0:
        return a / b
    else:
        return "Kan ikke dele med null"

# Testing av funksjonene
print(legg_til(10, 5))
print(trekk_fra(10, 5))
print(multipliser(10, 5))
print(del_tall(10, 5))

3. Objektorientert Programmering (OOP)

Oppgave:

  • Lag en enkel Python-klasse for en "Bruker" som har attributter som navn, e-post, og passord. Implementer metoder for å endre passord og vise brukerinformasjon.

Læringsutbytte:

  • Kan skrive objektorientert kode og forstå konseptene med klasser og objekter.

Kodeeksempel:

class Bruker:
    def __init__(self, navn, epost, passord):
        self.navn = navn
        self.epost = epost
        self._passord = passord  # Private attributt

    def endre_passord(self, nytt_passord):
        self._passord = nytt_passord

    def vis_info(self):
        print(f"Navn: {self.navn}, E-post: {self.epost}")

# Opprette en ny bruker og vise informasjon
bruker1 = Bruker("Ola Nordmann", "[email protected]", "hemmelig")
bruker1.vis_info()
bruker1.endre_passord("nytt_passord")

4. API og GUI

Oppgave:

  • Bruk Flask for å lage et enkelt RESTful API som kan legge til, hente, oppdatere og slette brukere.
  • Lag et enkelt GUI med Tkinter som kan kommunisere med Flask-API-et for å vise og oppdatere brukerinformasjon.

Læringsutbytte:

  • Har kunnskap om utvikling av brukergrensesnitt og kommunikasjon mellom ulike programgrensesnitt.
  • Kan utvikle et brukergrensesnitt ved hjelp av kode og utviklingsverktøy.

Kodeeksempel for Flask API:

from flask import Flask, request, jsonify

app = Flask(__name__)

brukere = {}

@app.route('/bruker', methods=['POST'])
def legg_til_bruker():
    data = request.get_json()
    brukernavn = data['navn']
    brukere[brukernavn] = data
    return jsonify({"message": "Bruker lagt til"}), 201

@app.route('/bruker/<navn>', methods=['GET'])
def hent_bruker(navn):
    return jsonify(brukere.get(navn, "Bruker ikke funnet")), 200

if __name__ == '__main__':
    app.run(debug=True)

5. Sikkerhet i Programmering

Oppgave:

  • Implementer grunnleggende sikkerhetsmekanismer som input-validering og unntaksbehandling i et Python-program.
  • Bruk Cisco-utstyret til å simulere nettverksangrep og vis hvordan programmet håndterer disse situasjonene.

Læringsutbytte:

  • Har kunnskap om grunnleggende sikkerhet relatert til programmering.
  • Kan drøfte grunnleggende sikkerhet til en applikasjon.

Kodeeksempel:

def del_tall(a, b):
    try:
        if b == 0:
            raise ValueError("Kan ikke dele med null")
        return a / b
    except ValueError as e:
        return str(e)

# Test sikkerhetsmekanismer
print(del_tall(10, 0))

Implementering av Cisco-utstyr

  1. Simulering av Nettverksangrep:

    • Bruk Cisco-enhetene til å generere nettverkstrafikk og simulere nettverksangrep som DoS (Denial of Service) for å teste applikasjonens motstand mot slike angrep.
  2. Nettverksovervåking:

    • Implementer overvåking ved hjelp av Cisco Prime eller Wireshark for å overvåke nettverkstrafikken generert av applikasjonene og IoT-sensorene.
  3. Integrasjon med IoTSimulator:

    • Bruk IoTSimulator sammen med Cisco-utstyret for å simulere IoT-enheter som kommuniserer med Flask-API-et. Dette kan hjelpe med å teste skalerbarhet og sikkerhet.

Ved å følge denne labben vil studentene få en helhetlig forståelse av programmering, nettverksadministrasjon, og sikkerhet, samt hvordan man kan bruke Cisco-utstyr for å simulere og teste IoT-miljøer.

For å utnytte dine Cisco-enheter programmatiskt, kan du bruke ulike verktøy og API-er som Cisco tilbyr. GitHub-repositoriet "CiscoDevNet/coding-skills-sample-code" gir eksempler på hvordan man kan bruke programmatiske tilnærminger for å styre Cisco-enheter.

1. Programmere funksjoner på Cisco-enheter

For å programmere funksjoner på Cisco-enheter, kan du bruke REST API-er, Python-skript, og andre verktøy som er tilgjengelige gjennom Cisco DevNet.

Eksempel på bruk av REST API med Python

Dette eksemplet viser hvordan man kan bruke Python til å kommunisere med en Cisco-enhet ved hjelp av REST API.

import requests
import json

# Enhetsinformasjon
url = "https://<cisco_device_ip>/restconf/data/ietf-interfaces:interfaces"
headers = {
    "Content-Type": "application/yang-data+json",
    "Accept": "application/yang-data+json",
}

# Autentisering
auth = ('<username>', '<password>')

# Eksempeldata for oppretting av en ny grensesnitt
payload = {
    "ietf-interfaces:interface": {
        "name": "GigabitEthernet1",
        "description": "Added via REST API",
        "type": "iana-if-type:ethernetCsmacd",
        "enabled": True,
        "ietf-ip:ipv4": {
            "address": [
                {
                    "ip": "192.168.1.1",
                    "netmask": "255.255.255.0"
                }
            ]
        }
    }
}

response = requests.post(url, headers=headers, data=json.dumps(payload), auth=auth, verify=False)

if response.status_code == 201:
    print("Interface created successfully.")
else:
    print(f"Failed to create interface. Status code: {response.status_code}")

2. Utnytte avanserte funksjoner i Cisco-enheter

Cisco-enheter har mange avanserte funksjoner som kan utnyttes programmatiskt, som QoS (Quality of Service), sikkerhetspolicyer, og nettverksovervåking. Her er noen eksempler:

QoS-konfigurasjon

Konfigurere QoS på en Cisco-enhet ved hjelp av Python og REST API.

url = "https://<cisco_device_ip>/restconf/data/Cisco-IOS-XE-native:native/policy-map"
headers = {
    "Content-Type": "application/yang-data+json",
    "Accept": "application/yang-data+json",
}

auth = ('<username>', '<password>')

payload = {
    "Cisco-IOS-XE-policy:policy-map": [
        {
            "name": "QoS-POLICY",
            "class": [
                {
                    "name": "class-default",
                    "bandwidth": {
                        "percent": 30
                    }
                }
            ]
        }
    ]
}

response = requests.put(url, headers=headers, data=json.dumps(payload), auth=auth, verify=False)

if response.status_code == 204:
    print("QoS Policy created successfully.")
else:
    print(f"Failed to create QoS Policy. Status code: {response.status_code}")

3. Automatisering med Cisco DNA Center

Cisco DNA Center gir kraftige API-er for automatisering av nettverksadministrasjon.

Eksempel på bruk av DNA Center API

import requests
import json

# DNA Center API-endepunkt og autentisering
url = "https://<dnacenter_ip>/dna/intent/api/v1/network-device"
headers = {
    "Content-Type": "application/json",
    "X-Auth-Token": "<dnacenter_token>"
}

response = requests.get(url, headers=headers, verify=False)

if response.status_code == 200:
    devices = response.json()
    print("List of network devices:")
    for device in devices['response']:
        print(f"Device ID: {device['id']}, Device Type: {device['type']}")
else:
    print(f"Failed to retrieve devices. Status code: {response.status_code}")

4. Bruk av Cisco Meraki API

Cisco Meraki gir også et kraftig sett med API-er for administrasjon av nettverk.

Eksempel på bruk av Meraki API for å hente nettverksenheter

import requests

url = "https://api.meraki.com/api/v1/organizations/<organization_id>/devices"
headers = {
    "Content-Type": "application/json",
    "X-Cisco-Meraki-API-Key": "<meraki_api_key>"
}

response = requests.get(url, headers=headers)

if response.status_code == 200:
    devices = response.json()
    print("List of Meraki devices:")
    for device in devices:
        print(f"Device Name: {device['name']}, Model: {device['model']}")
else:
    print(f"Failed to retrieve devices. Status code: {response.status_code}")

Oppsett av IoT-simulator ved bruk av Kubernetes og Docker

For å simulere IoT-enheter ved hjelp av Cisco-utstyr og Kubernetes, kan du bruke eksempelet fra "IoTSimulator"-repositoriet som du nevnte.

Steg for å sette opp IoT-simulator

  1. Last ned IoTHubCredentials.json:

    wget https://raw.githubusercontent.com/VladimirAkopyan/IoTSimulator/master/IoTHubCredentials.json
  2. Opprett Kubernetes secret:

    kubectl create secret generic sim-sensor-credentials --from-file=IoTHubCredentials.json
  3. Opprett Kubernetes ressursene:

    kubectl create -f https://raw.githubusercontent.com/VladimirAkopyan/IoTSimulator/master/Kubernetes.yaml
  4. Verifiser oppsettet:

    kubectl get pods
    kubectl logs <pod_name>

Med disse verktøyene og API-ene kan du programmatiskt administrere og konfigurere dine Cisco-enheter, samt simulere IoT-miljøer for å teste og overvåke nettverksinfrastruktur og sikkerhet.

⚠️ **GitHub.com Fallback** ⚠️