Bambu discovery (SSDP)

Yup.

Welke software doet dit? Waar is de configuratie en/of code? Oh het is /root/bambu-loop.bash. Is het hardcoded of stuurt het nog iets anders aan?

Want daar gaat iets mis. Meerdere dingen. Het scriptje stuurt elke 5 seconden een HTTP/1.1 200 OK maar dat moet een NOTIFY * HTTP/1.1 zijn. Echter komen de rest van de velden ook niet overeen met wat het zou moeten zijn.

Dit is een packet dat de bambu zelf uitstuurt:

NOTIFY * HTTP/1.1
Host: 239.255.255.250:1990
Server: UPnP/1.0
Location: 10.4.2.42
NT: urn:bambulab-com:device:3dprinter:1
NTS: ssdp:alive
USN: 00M09A410600646
Cache-Control: max-age=1800
DevModel.bambu.com: BL-P001
DevName.bambu.com: 3DP-00M-646
DevSignal.bambu.com: -70
DevConnect.bambu.com: lan
DevBind.bambu.com: free
Devseclink.bambu.com: secure
DevInf.bambu.com: wlan0
DevVersion.bambu.com: 01.08.02.00


(elke regel eindigt op \r\n en het hele packet eindigt met een \r\n\r\n)

Details over Bambu's SSDP implementatie

(offtopic want BAMI negeert het en Bambu Studio doet het soms maar heeft het niet nodig)

Bambu Studio doet in sommige situaties elke 5 seconden een M-SEARCH * HTTP/1.1. Hierop stuurt de printer (op unicast) een HTTP/1.1 200 OK terug. En dit blijft elke 5 seconden herhalen. Waarom is me niet duidelijk want het werkt ook zonder. Of die dit doet lijkt afhankelijk te zijn van firewall settings, maar ik snap nog niet op welke manier. needs more research

onhandig detail over netcat

nc is op mijn laptop een symlink naar nmap’s netcat (aka ncat) maar op gateway is dat een symlink naar openBSD’s netcat (aka netcat). Dat zou niet moeten uitmaken want echo foo | nc -u 255.255.255.255 2021 zou in beide situaties moeten werken. Maar dat doet het niet. Blijkt dat OpenBSD’s code toch niet helemaal compatible is met Linux. Debian heeft hier een sloot patches voor, waaronder broadcast-support.patch. Maar die vereist een extra command line optie, die upstream OpenBSD’s netcat en Nmap’s netcat helemaal niet kennen. Vervolgens ontbreekt die patch in Fedora (en wellicht meer distro’s) waardoor die wellicht helemaal geen broadcast support hebben. En om te zorgen dat die ook weer returnt moet er een -q0 bij. Wat een chaos. Oh well.

En dan is er op Debian ook nog een netcat-traditional welke al 20+ jaar unmaintained is en al helemaal niet werkt. En dan is er ook nog een busybox nc welke op Fedora weer wel werkt maar op Debian geen -u heeft.

aaAAAaAAAAAaaARGH!!!1!

$ echo foo | ncat -v -u 255.255.255.255 53755
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 255.255.255.255:53755.
Ncat: 4 bytes sent, 0 bytes received in 0.01 seconds.
$ echo foo | netcat -v -u 255.255.255.255 53755
netcat: connect to 255.255.255.255 port 53755 (udp) failed: Permission denied
$ echo foo | netcat -vbuq0 255.255.255.255 53755
Connection to 255.255.255.255 53755 port [udp/*] succeeded!

(53755 is een willekeurig hoog poortnummer voor testing)

2 Likes

Bedankt voor het onderzoeken :slight_smile:

Is het hardcoded of stuurt het nog iets anders aan?

Hartstikke hardcoded. Alleen de timestamp is variabel. Wat intesessant is, want zo te zien zit er geen datum in het pakketje dat de Bambu stuurt.

Want daar gaat iets mis. Meerdere dingen. Het scriptje stuurt elke 5 seconden een HTTP/1.1 200 OK maar dat moet een NOTIFY * HTTP/1.1 zijn. Echter komen de rest van de velden ook niet overeen met wat het zou moeten zijn.

Ah, ik had een scriptje online gevonden en daar wat variabelen ingevuld. Werkte voor Bambu Studio, dus ik heb verder niks bekeken. Het enige wat ik heb toegevoegd is -b om het te kunnen broadcasten (het scriptje was oorspronkelijk bedoeld om op het desktopsysteem gebruikt te worden).

Dit is een packet dat de bambu zelf uitstuurt:

Lol, da’s wel heel erg anders, zeg. Aangezien het nu werkt met Bambu Studio en ik dat niet stuk wil maken, ga ik pas aanpassingen doen als ik zelf op de space ben zodat ik ook kan testen of dat nog werkt.

Logisch en verstandig. Maar ik heb het getest met Bambu Studio :slight_smile:

(sterker nog, ik heb het uiteindelijk (nog) niet op de TV getest door tijdsgebrek na de netcat rabbit hole)

Omdat de “Bind with Access Code” optie ronduit brak werkt (oftewel niet) heb ik voor de printer thuis GitHub - backplane/bambu-add-ip: Workaround for adding the remote IP of a BambuLab 3D printer gebruikt wat tot nu toe prima zijn ding doet. Via een VPN heb je namelijk weinig announcement pakketten :slight_smile:

Dat is een fork van het scriptje dat ik gebruikt heb. Het enige praktische verschil is dat ik 'm het UDP-datagram laat broadcasten op het netwerk zodat het voor iedereen werkt, zodat je het niet lokaal hoeft te draaien.

“Bind with Access Code” heb ik inderdaad ook helemaal niet werkend gekregen. Geen foutmelding, maar ook geen verbinding. Dat was plan A.

Scriptje aangepast, BAMI kan de printer nu vinden.