====== Formlabs Form 2 ======
* https://formlabs.com/3d-printers/form-2/
* Software: https://formlabs.com/tools/preform/
* hat statische IP Adresse im FabLab Netzwerk (siehe Aufkleber auf Gerät)
* hat einen DNS Eintrag (''form2.lab.fablab.uni-erlangen.de''), damit er ins Internet kommt (Auflage RRZE)
* sendet Daten an Dashboard https://formlabs.com/tools/dashboard/
* Zugangsdaten: [[interna:passworte|Passwörter]]
===== Reverse Engineering =====
==== Drucker <-> PreForm Software ====
* Drucker gibt sich schöne Namen (anhand von Seriennummer?). Unserer z.B. PrettyTiger
* Software kommuniziert über TCP Port 35 (priv-print) mit Drucker
* Nachrichten sind im (custom?) JSON Format
* Drucker announcet sich mit mDNS (und sagt TCP Port 8080 wäre offen, ist er aber nicht?)
IPv4 Formlabs Form 2 PrettyTiger _formlabs_formule._tcp local
hostname = [PrettyTiger.local]
address = [10.42.0.2]
port = [8080]
txt = []
* Drucker sendet LLDP Announcements:
Chassis:
ChassisID: mac 38:0a:ab:xx:xx:xx
SysName: PrettyTiger
SysDescr: Poky (Yocto Project Reference Distro) 2.2.1 (morty) Linux 3.14.26-g0bc030943a #1 Fri Jan 19 03:45:32 UTC 2018 armv7l
MgmtIP: 10.188.64.34
Capability: Bridge, off
Capability: Router, off
Capability: Wlan, off
Capability: Station, on
==== Drucker <-> API ====
* Hat Connman als Netzwerkmanager: https://01.org/connman Dieser prüft, ob er Internet hat, indem er einen HTTP GET Request auf http://ipv4.connman.net/online/status.html schickt und den Header ''X-ConnMan-Status: online'' erwartet
* Versucht sich mit https://a2e8eoit3jh7lr.iot.us-east-1.amazonaws.com/ und https://api.formlabs.com/ zu verbinden (vermutlich fürs Dashboard). Allerdings werden SSL Zertifikate validiert (kein MITM möglich).
==== Dashboard <-> API ====
* API Requests können im Browser mit gelesen werden, wenn man sich auf https://formlabs.com/tools/dashboard/ bewegt.
* Authentifizierung erfolgt dann mit mit Bearer Token, den man durch das Login Formular bekommt (TODO wie genau geht das? Das postet irgendwie ''username'', ''password'', ''client_id'', ''client_secret'' und ''grant_type=password'' zu https://api.formlabs.com/o/token/. Die ''client_*'' fallen vom Himmel?)
* Man findet eig. alle gewünschten Daten relativ einfach. Beispiel API Endpunkte:
* https://api.formlabs.com/printernet/v1/my/printers/
* https://api.formlabs.com/printernet/v1/my/printers/PrettyTiger/
* https://api.formlabs.com/printernet/v1/my/stats/
* ...