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.
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.
- 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
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()
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))
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")
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)
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))
-
Simulering av Nettverksangrep:
- Bruk Cisco-enhetene til å generere nettverkstrafikk og simulere nettverksangrep som DoS (Denial of Service) for å teste applikasjonens motstand mot slike angrep.
-
Nettverksovervåking:
- Implementer overvåking ved hjelp av Cisco Prime eller Wireshark for å overvåke nettverkstrafikken generert av applikasjonene og IoT-sensorene.
-
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.
For å programmere funksjoner på Cisco-enheter, kan du bruke REST API-er, Python-skript, og andre verktøy som er tilgjengelige gjennom Cisco DevNet.
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}")
Cisco-enheter har mange avanserte funksjoner som kan utnyttes programmatiskt, som QoS (Quality of Service), sikkerhetspolicyer, og nettverksovervåking. Her er noen eksempler:
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}")
Cisco DNA Center gir kraftige API-er for automatisering av nettverksadministrasjon.
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}")
Cisco Meraki gir også et kraftig sett med API-er for administrasjon av nettverk.
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}")
For å simulere IoT-enheter ved hjelp av Cisco-utstyr og Kubernetes, kan du bruke eksempelet fra "IoTSimulator"-repositoriet som du nevnte.
-
Last ned IoTHubCredentials.json:
wget https://raw.githubusercontent.com/VladimirAkopyan/IoTSimulator/master/IoTHubCredentials.json
-
Opprett Kubernetes secret:
kubectl create secret generic sim-sensor-credentials --from-file=IoTHubCredentials.json
-
Opprett Kubernetes ressursene:
kubectl create -f https://raw.githubusercontent.com/VladimirAkopyan/IoTSimulator/master/Kubernetes.yaml
-
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.