Table of Contents

Hausaufgaben auf Dienstag 29. November

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.

  1. 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)
  2. Überfliegen Sie http://ruby-doc.org/core-2.2.0/Time.html (nützlich für das Ruby-Programm).
  3. 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.
  4. Entpacken Sie diese beiden Dateien.
  5. 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.
  6. 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

einige Antworten

einige Antworten

IP-Adresse: Linux: ifconfig, Windows ipconfig. Zu Hause typischerweise 192.168.1.1 (router).

Typischweise 255.255.255.0 Netzmaske (24 Bit Netz, 8 Bit Host).

Angriffsszenario: Man bettet auf einer Webseite einen Link (z.B. Bild, wird automatisch geladen), das auf z.B. http://192.168.0.1/tolleURL?mit=parametern&die=etwas_dummes_auf_dem_router_anstellt

Es ist nicht unwahrscheinlich, dass der User noch mit Adminrechten auf dem Router angemeldet ist und die Anfrag an den Router erfolgreich durchgeht. Viele Router fragen aber vorher immer das Passwort ab, so dass dieser Angriff heute nicht mehr so erfolgreich ist.

www.ksbg.ch wird (laut https://www.iplocation.net/) in Irland gehostet. Zumindest steht dort der Server, der die Requests in die Amazon Cloud leitet. Die Daten können irgendwo auf dem Planeten liegen.

Port Numbers: Siehe auch https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

Dienst Port
http 80
https 443
ssh 22
voip 5060

Eigener Webserver zu Hause: Domain (oder Subdomain), Nameserver, der den Domainnamen auf die IP zu Hause auflöst. Idealerweise ist diese IP fix (kostet zwischen 100.- und 200.- im Jahr). Sonst muss bei jeder neuen Vergabe einer IP-Adresse der Nameserver entsprechend neu konfiguriert werden. Dazu gibt es Dienste (vor langer Zeit mal gratis, was heute läuft, keine Ahnung).

Damit ist die eigene IP vom Internet aus erreichbar. Dazu muss noch der Router konfiguriert werden, damit er Anfragen auf port 80 (und evtl. 443) auf die interne IP mit dem Webserver weiterleitet. Der interne Computer muss natürlich einen Webserver am laufen haben und die Firewall entsprechend konfiguriert (wenn denn eine da ist).

?? Regular Expressions: http://rubylearning.com/satishtalim/ruby_regular_expressions.html

Aufgaben auf Donnerstag 10. November

Studieren Sie folgende String-Methoden (z.B. hier.)

Programmieren Sie nun folgende Programme, die einen String einlesen und dann das Resultat ausgeben.

  1. Zwischen allen Buchstaben eines Strings wird ein Leerschlag eingefügt. Z.B. wird “abc efg” zu “a b c e f g”.
  2. Zwei zufällige Buchstaben werden vertauscht. Tipp: verwenden die spezielle Ruby-Syntax a,b=b,a um zwei Werte zu vertauschen.
  3. 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).
  4. 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.

Lösungsvorschläge

Lösungsvorschläge

1. Leerzeichen einfügen:

str = "Ein Test-String  OK."
 
# Einzeiler
puts str.chars.join(" ")
 
# For loop
print str[0]
for i in 1...(str.size)
  print " #{str[i]}"
end
puts

2. Buchstaben vertauschen

str = "Buchstaben"
 
# Zwei zufällige, unterschiedliche Positionen
p1, p2 = rand(str.size), rand(str.size-1)
p2+=1 if p2>=p1
# Vertauschen
str[p1], str[p2] = str[p2], str[p1]
puts str

3. Ziffern zählen:

str = "112223"
puts str
# Position im String
p = 0
# aktuelle Ziffer
z = str[p]
# Anzahl Vorkommnisse
n = 0
 
# Resultat
res = ""
 
# String durchgehen
str.each_char{|c|
  if c==z # Immer noch gleich?
    n+=1  # Zähler erhöhen
  else
    res += "#{n}#{z}"  # Letze Ziffer ausgeben
    n = 1              # Neue Ziffer merken
    z = c
  end
}
res += "#{n}#{z}"    # Rest ausgeben
 
puts res

4. Wechstaben Verbuchseln

def switch(wort)
  return wort if (wort.size<4)
  p1, p2 = rand(wort.size-2)+1, rand(wort.size-3)+1
  p2+=1 if p2>=p1
  # Vertauschen
  res = String.new(wort)  # Wort kopieren, sonst Überraschungen möglich
  res[p1], res[p2] = res[p2], res[p1]
  return res
end
 
text = "Bis Juni 2016 wurden über 39,5 Millionen Artikel der Wikipedia in annähernd 300 Sprachen in Mehrautorenschaft von freiwilligen Autoren verfasst. Darüber hinaus werden die Artikel nach dem Prinzip des kollaborativen Schreibens fortwährend bearbeitet und diskutiert. Alle Inhalte der Wikipedia stehen unter freien Lizenzen."
 
# Einzeiler
puts text.split(" ").map{|w| switch(w)}.join(" ")

Aufgaben auf Donnerstag 27. Oktober

Aufgaben auf Dienstag 20. September

Aufgaben auf Dienstag 13. September

Aufgaben auf Donnerstag 8. September

  new Color(Math.random()*0x100_0000);

Antwort

Antwort

Mögliche Farbwerte gehen von 0x00_0000 bis 0xff_ffff. Da die Zufallszahl immer kleiner als 1 ist, wird mit 0xff_ffff+1 = 0x100_0000 multipliziert.

Antwort

Antwort

“421”

  1. Welche natürliche Zahl erhält man, wenn man diese 3 Bytes Little-Endian als 24 bittige Binärzahl interpretiert?

Antwort

Antwort

Erstes Byte ist das niederwertigste (Einerstelle), also $52\cdot 256^0 + 50\cdot 256^1+49\cdot 256^2 = 3224116$, oder hexadezimal: 0x34 + 0x100*0x32 + 0x10000*0x31 = 0x313234

  1. Welche natürliche Zahl erhält man, wenn man diese 3 Bytes Big-Endian als 24 bittige Binärzahl interpretiert?

Antwort

Antwort

Erstes Bytes ist das höchstwertigste Byte. Also $52\cdot 256^2 + 50\cdot 256^1+49\cdot 256^0 = 3420721$, oder hexadezimal: 0x10000*0x34 + 0x100*0x32 + 0x31 = 0x343231

  1. Welche natürliche Zahl erhält man, wenn man den String (wie im Punkt 1) als Hexadezimalzahl interpretiert?

Antwort

Antwort

0x421 = $1 + 2\cdot 16 + 4 \cdot 256 = 1+32+1024 = 1057$

Antwort

Antwort

Bei allen Grossbuchstaben ist das Bit 5 (d.h. das sechste von rechts) gleich Null (32er-Stelle ist Null). Diese Codes haben die Form 0b010y_yyyy. Bei Kleinbuchstaben ist das Bit 5 immer gleich Eins (32er-Stelle ist Eins). Diese Codes haben die Form 0x011y_yyyy.

  1. Wie kann man, in der Binärdarstellung der Codes, ganz einfach aus Gros- Kleinbuchstaben machen und umgekehrt?

Antwort

Antwort

Man ändert einfach das Bit Nr. 5.

Antwort

Antwort

4 = 0b100. Also notiert man ein “Behalte 1” auf der übernächsten Position. Beispiel (nur die Einer-Stellen sind zusammengezählt):

1 1 1
+ 1 1 1
+ 1 1 1
+ 1 1 1
Behalte 1
—- —- —- —–
0

Antwort

Antwort

Das Bit 16 entspricht der Einerstelle der fünften Hex-Ziffer. Ist diese gerade d.h. 0,2,4,6,8,a,c,e, dann ist das Bit 0, ansonsten 1. Bsp: 0xc84f_35a2. Fünfte Ziffer 0xf=15, ungerade, also Bit 1). In Ruby: 0xc84f_35a2[16]

Antwort

Antwort

78546939656932.to_s(36)

Aufgaben auf Dienstag 6. September

Hausaufgaben auf Dienstag 23. August