Κάθε ομάδα έχει οπτική επαφή με ένα ρομποτικό όχημα EV3, αλλά απαγορεύεται να το αγγίξει. Το ρομπότ εκτελεί το λειτουργικό σύστημα ev3dev από κάρτα SD και χρησιμοποιεί μια ασύρματη κάρτα δικτύου (USB Wi-Fi) για να συνδεθεί σε ένα τοπικό Access Point.
Τόσο το ρομπότ όσο και οι υπολογιστές του εργαστηρίου βρίσκονται στο ίδιο τμήμα δικτύου (10.142.62.xxx), επιτρέποντας την απευθείας επικοινωνία. Στόχος σας ως ομάδα είναι να εντοπίσετε την IP του, να εκμεταλλευτείτε μια βασική ευπάθεια ασφαλείας για να συνδεθείτε, και να γράψετε κώδικα (με τη βιβλιοθήκη ev3dev2) για να το ελέγξετε.
chmod, brickrun).pico).Κάθε ομάδα θα ακολουθήσει μία από τις παρακάτω δύο μεθόδους, ανάλογα με την πρόκληση που θα της ανατεθεί.
Μέθοδος: "Physical Access"
ev3dev εμφανίζει την IP του (π.χ. 10.142.62.112) στην οθόνη του.Μέθοδος: "Black Box / Network Analysis"
22 είναι στη λίστα σάρωσης (δεν είναι στην προεπιλογή).10.142.62.1 - 10.142.62.254.ev3dev.ev3dev, προχωρήστε στο Βήμα 2.Ενέργεια: Συνδεθείτε στο ρομπότ μέσω SSH από τον υπολογιστή σας.
Οδηγίες: Ανοίξτε ένα Τερματικό (Terminal). (Σε Windows, μπορείτε να χρησιμοποιήσετε PowerShell ή Command Prompt).
Πρόκληση Ασφαλείας (Η Ευπάθεια): Χρήση των προεπιλεγμένων credentials του ev3dev.
robotmakerΕντολή (Ο "Operator" εκτελεί):
ssh robot@10.142.62.XXX
(Αντικαταστήστε το XXX με την IP που εντοπίσατε στο Βήμα 1).
Ενέργεια: Δημιουργήστε το αρχείο bpxx.py (όπου xx ο αριθμός μητρώου του "Developer").
Οδηγίες: Χρησιμοποιήστε τον επεξεργαστή κειμένου pico.
Εντολή: pico bpxx.py
Κώδικας (Ο "Developer" υπαγορεύει):
#!/usr/bin/env python3
# Import ev3dev2 library
from ev3dev2.motor import MoveTank, OUTPUT_A, OUTPUT_B, SpeedPercent
from time import sleep
import sys
print("Starting ev3dev2 script...")
# Define Tank (Motors on OUTPUT_A and OUTPUT_B)
try:
tank = MoveTank(OUTPUT_A, OUTPUT_B)
except Exception as e:
print("ERROR: Check motors on A/B.", file=sys.stderr)
sys.exit(1) # Exit with error
print("Running movement: 5 loops (Fwd/Rev)")
rotations = 1
speed = SpeedPercent(40)
for i in range(5):
# Print loop number (No f-string)
print("Loop " + str(i+1) + "/5")
# Move Forward (approx 10cm)
tank.on_for_rotations(speed, speed, rotations)
sleep(0.5)
# Move Reverse
tank.on_for_rotations(-speed, -speed, rotations)
sleep(0.5)
print("Completed.")
Αποθήκευση στο pico: Πατήστε Ctrl+O (WriteOut) -> Enter.
Έξοδος από το pico: Πατήστε Ctrl+X.
Ενέργεια: Κάντε το αρχείο Python εκτελέσιμο (executable).
Οδηγίες: Δίνουμε στο Linux το "δικαίωμα" να τρέξει το αρχείο.
Εντολή (Ο "Operator" εκτελεί):
chmod +x bpxx.py
Ενέργεια: Εκτελέστε το script χρησιμοποιώντας το brickrun.
Οδηγίες: Το brickrun είναι απαραίτητο για να αλληλεπιδράσει ο κώδικας με το υλικό (hardware) του EV3.
Εντολή (Ο "Operator" εκτελεί):
brickrun ./bpxx.py
chmod +x και ./;1. chmod +x (Η "Άδεια" Εκτέλεσης)
Στο Linux (όπως το ev3dev), όταν δημιουργείτε ένα νέο αρχείο με το pico, το σύστημα το βλέπει ως απλό κείμενο. Για λόγους ασφαλείας, το Linux δεν επιτρέπει την εκτέλεση αρχείων κειμένου. Η εντολή chmod +x bpxx.py δίνει στο αρχείο την άδεια («x») να εκτελεστεί.
2. ./ (Ο "Χάρτης" Εκτέλεσης)
Όταν πληκτρολογείτε μια εντολή (π.χ. pico), το Linux ψάχνει μόνο σε «επίσημους» φακέλους συστήματος (το $PATH). Το αρχείο σας bpxx.py δεν είναι εκεί. Το ./ είναι ο «χάρτης» που λέει στο σύστημα: "Μην ψάχνεις στο $PATH. Εκτέλεσε το αρχείο bpxx.py που βρίσκεται ακριβώς εδώ (.)."
Σύνοψη: (1) Το chmod +x «ξεκλειδώνει» το αρχείο και (2) το ./ λέει στο τερματικό πού ακριβώς βρίσκεται.
robot / maker) είναι μια κρίσιμη ευπάθεια. Σε ένα πραγματικό σενάριο, η πρώτη ενέργεια μετά τη σύνδεση θα ήταν η αλλαγή του συνθηματικού με την εντολή passwd.
Για την εμβάθυνση στις τεχνολογίες που χρησιμοποιήσατε:
robot).
[ev3dev.org]
bpxx.py (με τον συμβατό κώδικα ev3dev2) να υπάρχει στον φάκελο home του robot.