Hausaufgaben auf Dienstag 29. November
- Nesa-Pilot Login fertig machen.
- Siehe Vorbereitung 2. Prüfung
Arbeitsauftrag am Dienstag 22. November und Hausaufgaben für Donnerstag 24. November
Datenverarbeitung mir Ruby und Regular Expressions
Hintergrund ist die Idee von S. Knaus, den MAC-Adressen im Schulhaus zu lauschen, um einmal zu sehen, was für Daten daraus gewonnen werden können. Das Projekt wird eventuell ausgebaut und die Daten an verschiedenen Orten erhoben.
- Lesen nach, was eine “MAC-Adresse” ist. Sie sollten nachher verstehen:
- Wie wird eine MAC-Adresse angegeben, aus wie vielen Bytes besteht sie?
- Aus welchen 2 Teilen ist die MAC-Adresse zusammengesetzt?
- Wie wird garantiert, dass diese weltweit eindeutig ist?
- Kann die MAC-Adresse geändert werden (MAC-Spoofing)?
- Finden Sie Ihre eigenen MAC-Adressen heraus (min 2 Netzwerkkarten im Laptop, 1 im Smartphone)
- Überfliegen Sie http://ruby-doc.org/core-2.2.0/Time.html (nützlich für das Ruby-Programm).
- Auf http://fginfo.ksbg.ch/~ivo/ef/ finden Sie zwei Dateien. Die eine (out.txt) enthält die offizielle Liste aller MAC-Prefixe mit Hersteller, die zweite (macscan.csv) enthält einen Mitschnitt aller MAC-Adressen, die von der Antenne im Schaukasten vor dem H47 an einem Tag detektiert wurden. Dieser Scan ist rein passiv, die Antenne sendet nichts, sondern “lauscht” nur, was die Geräte von sich geben.
- Entpacken Sie diese beiden Dateien.
- Schreiben Sie eine Ruby-Klasse, die die Datei oui.txt einliest und dann eine Methode
get_company(mac)
hat, die für eine Mac-Adresse den Herstellen liefert. - Schreiben Sie ein Ruby-Programm, das die Datei macscan.csv einliest und die Daten aufbereitet, so dass Sie folgende Dinge beantworten können:
- Für jedes 1-Minuten-Intervall, wie viele unterschiedliche MAC-Adressen wurden gesichtet? Geben Sie die Daten so aus, dass diese mit einem Programm als Kurve dargestellt werden kann (z.B. eine Tabellenkalkulation, oder gnuplot, octave, R, etc.).
- Welcher Prozentsatz der MAC-Adressen kann Apple-Geräten zugeordnet werden?
- Welche MAC-Adressen waren während einer ganzen Lektion immer wieder zu sehen? Welcher Klasse könnten diese wohl zugeordnet werden?
- Sich weitere Fragestellungen zu diesen Daten überlegen und eventuell programmieren.
Lösungsvorschläge
Aufgaben auf Dienstag 15. November
Fragen zu DNS, IP-Adressen, Ports
- Finden Sie heraus, welche IP-Adressen Ihre eigenen Geräte (inkl. Router) zu Hause haben (private wie öffentliche).
- Wie gross ist Ihr Heimnetzwerk theoretisch (oder anders gefragt, wie viele Bits Ihre Netzmaske sind 0)?
- Können Sie sich ein Angriffsszenario vorstellen, wo die Kenntnis Ihrer internen IP-Adressen (vom Internet aus nicht erreichbar) nützlich sein könnte?
- Was kostet ein .ch-Domain pro Jahr? Wo?
- Finden Sie heraus, wo www.ksbg.ch geographisch zu Hause ist.
- Auf welchen Ports laufen standardmässige folgende Dienste: http, https, ssh, VoIP?
- Was müssen Sie alles tun, damit Sie zu Hause Ihren eigenen Webserver betreiben könnten? Welche Services müssten Sie wohl einkaufen? Was müssten Sie zu Hause installieren bzw. konfigurieren?
?? Regular Expressions: http://rubylearning.com/satishtalim/ruby_regular_expressions.html
Aufgaben auf Donnerstag 10. November
Studieren Sie folgende String-Methoden (z.B. hier.)
- [] (Substrings, Zugriff auf einzelne Buchstaben), z.B. hier.
- chars
- each_char
- strip
- split
- die Array-Methode join (z.B. hier).
- die Methode rand(n) (mit n eine Ganzzahl >= 1) (z.B. hier).
Programmieren Sie nun folgende Programme, die einen String einlesen und dann das Resultat ausgeben.
- Zwischen allen Buchstaben eines Strings wird ein Leerschlag eingefügt. Z.B. wird “abc efg” zu “a b c e f g”.
- Zwei zufällige Buchstaben werden vertauscht. Tipp: verwenden die spezielle Ruby-Syntax
a,b=b,a
um zwei Werte zu vertauschen. - Die Eingabe besteht nur aus Ziffern 1, 2 und 3. Produzieren Sie dann als Ausgabe einen String, der angibt, wie viele dieser Ziffern vorkommen. Beispiel: “112223” liefert “213213” (2 Einsen, 3 Zwei, 1 Drei).
- Schreiben Sie ein Prmgraom, das in jdeem Wrot zewi innree Bcuhstaben vertauhcst, dh.. der esrte und letzte Buchetabsn müssen blnibee. Als Tiennzerchen zhiscwen Wöretrn knönen Sie eifnach Llerscheäge veewendrn(edor das ncoh bseser prognammierer). Als Beispeil eienr Augsabe dinet dseier Ttxe.
Aufgaben auf Donnerstag 27. Oktober
- Pseudocode aufs Wiki: labyrinth
Aufgaben auf Dienstag 20. September
- Aufgaben auf Ruby-Kurs: Arrays
Aufgaben auf Dienstag 13. September
- Ruby-Kurs (pdf-Version) Abschnitt 1.6 (Loops), Aufgabe 8 ist fakultativ.
Aufgaben auf Donnerstag 8. September
- In Java kann eine Farbe durch Angabe einer einzigen natürlichen Zahl ausgewählt werden, von denen die “unteren” drei Bytes als rgb-Werte aufgefasst werden. Die Funktion
Math.random()
liefert eine Fliesskommazahl $\in [0,1[$. Erklären Sie, wie und warum der folgende Einzeiler eine Zufallsfarbe wählt:
new Color(Math.random()*0x100_0000);
- Im Speicher stehen 3 Bytes mit den Werten 52, 50 und 49.
- Welche Zeichenkette (String) erhält man, wenn man diese 3 Bytes als ASCII-Code interpretiert?
- Welche natürliche Zahl erhält man, wenn man diese 3 Bytes Little-Endian als 24 bittige Binärzahl interpretiert?
- Welche natürliche Zahl erhält man, wenn man diese 3 Bytes Big-Endian als 24 bittige Binärzahl interpretiert?
- Welche natürliche Zahl erhält man, wenn man den String (wie im Punkt 1) als Hexadezimalzahl interpretiert?
- Grossbuchstaben haben den ASCII-Code 65 (A) bis 90 (Z). Kleinbuchstaben 97 (a) bis 122 (z). Von irgendeinem Buchstaben ist sein ASCII-Code in Binärdarstellung gegeben.
- Wie können Sie auf einen Blick entscheiden, ob es sich um einen Klein- oder Grossbuchstaben handelt?
- Wie kann man, in der Binärdarstellung der Codes, ganz einfach aus Gros- Kleinbuchstaben machen und umgekehrt?
- Zählt man mehrere binäre Zahlen mit schriftlicher Addition zusammen, kann es einen Übertrag (“Behalte”) geben, der grösser ist als 2. Wie müsste man “Behalte 4” aufschreiben? (Als Beispiel: 4 mal die 7 zusammenzählen).
- Wie bestimmt man möglichst effizient das Bit 16 (d.h. das siebzehnte Bit, man beginnt bei Bit 0 zu zählen) einer natürlichen Zahl, die als 8-stellige Hexadezimalzahl gegeben ist? Wie könnte man das mit Ruby tun?
- Lernen Sie die Zweierpotenzen bis $2^{10}$ auswendig. Lernen Sie folgende Zweierpotenzen auf 10% genau auswendig: $2^{16}$, $2^{24}$, $2^{32}$, $2^{64}$.
- Schreiben Sie die Zahl 78546939656932 in der Basis 36. Verwenden Sie dazu ruby.
Aufgaben auf Dienstag 6. September
- Ruby-Kurs (PDF-Version) bis und mit 1.5
Hausaufgaben auf Dienstag 23. August
- Backup Ihrer lieben Daten
- Ubuntu Installationsimage auf Stick mitbringen (oder andere Linux-Distro) (z.B. von http://www.ubuntu.com/ oder http://lubuntu.net/ für ältere Kisten).
- Ggf. VirtualBox oder ähnliches installieren. https://www.virtualbox.org/
- Ggf. schneller USB-Stick (>=16GB) oder externe HD/SDD (passender Anschluss) mitbringen.
- Laptop mitbringen.