====== 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/ * ...