กำลังตรวจจับอุปกรณ์ IoT ในเว็บเบราว์เซอร์?


11

เมื่อเร็ว ๆ นี้ฉันซื้อรีเลย์ wifi สองตัวจาก Xiaomi แม้ว่าพวกเขาจะแข็งแกร่งมาจนถึงตอนนี้ฉันไม่ชอบแอปของ Xiaomi จริงๆ แต่ฉันชอบความคิดที่ว่ามันใช้งานได้จริงทั้งใน LAN และผ่านอินเทอร์เน็ต เมื่ออยู่ใน LAN พวกเขาจะเปิดและปิดได้อย่างรวดเร็วโดยพิจารณาจากเซิร์ฟเวอร์ของ Xiaomi ที่อยู่ในประเทศจีน

ดังนั้นฉันต้องการม้วนรีเลย์ตาม ESP8266 ของฉันเอง (ฉันรู้ว่าฉันสามารถทำให้ฮาร์ดแวร์พร้อมแล้วนั่นคือโบนัส) ปัญหาของฉันคือฉันจะตรวจสอบรีเลย์ในเครือข่ายของฉันโดยอัตโนมัติจากหน้าเว็บได้อย่างไร

จาก "แอพ" ฉันสามารถใช้ SSDP, mDNS-SD หรือ UPNP เพื่อตรวจจับสิ่งต่าง ๆ แต่ฉันไม่พบข้อมูลเกี่ยวกับเรื่องนี้เป็นไปได้จากเว็บเบราว์เซอร์ (โดยทั่วไป Chrome บน Android) เนื่องจากฉันเปลี่ยนเว็บเพจสถานีอากาศของฉันเป็น Progressive Web App ฉันจึงติดใจ ฉันชอบความคิดของสิ่งต่าง ๆ เพียงแค่เป็นเว็บเพจไม่ใช่แอปที่คุณต้องติดตั้ง และ PWAs เติมช่องว่างด้วยโหมดออฟไลน์ด้วย

มันแปลกที่ส่วน "ยาก" (การเปิดและปิดรีเลย์จากนอก LAN) เป็นเรื่องเล็กน้อยที่จะแก้ปัญหาผ่านเซิร์ฟเวอร์ MQTT แต่ฉันไม่ต้องการพึ่งพาเซิร์ฟเวอร์ MQTT ภายนอก หากฉันใช้ LAN ฉันต้องการพูดคุยกับรีเลย์โดยตรง ถ้าไม่เช่นนั้นส่งคำสั่งผ่าน MQTT

แน่นอนฉันสามารถพึ่งพาเซิร์ฟเวอร์เพื่อค้นหารีเลย์ แต่ในกรณีนั้นฉันต้องการการเชื่อมต่ออินเทอร์เน็ต (หากเซิร์ฟเวอร์ MQTT ของฉันอยู่บน "คลาวด์") หรือเซิร์ฟเวอร์โฮสต์ที่บ้าน ฉันมีเซิร์ฟเวอร์ที่บ้านและแม้ว่าฉันจะไม่ได้ราสเบอร์รี่ปี่สามารถเติมเต็มช่องว่างได้อย่างง่ายดาย แต่อุดมคติจะไม่จำเป็นต้องมีเซิร์ฟเวอร์เมื่อพูดคุยกับอุปกรณ์ผ่าน LAN (Wifi ในกรณีนี้) ฉันชอบที่จะเก็บมันไว้ให้ได้มากที่สุดและใช้ MQTT เพื่อถอยกลับไปเมื่อฉันอยู่บน WAN (MQTT แก้ปัญหา CG-NAT และการส่งต่อพอร์ต)


1
ยินดีต้อนรับสู่เว็บไซต์ hjf! ขณะนี้คำถามของคุณค่อนข้างกว้าง มันจะช่วยถ้าคุณมีความเจาะจงมากขึ้น: ตัวอย่างเช่นคุณใช้ภาษาใดในปัจจุบันและคุณพบข้อผิดพลาด / ปัญหาเฉพาะใดบ้าง
anonymous2

1
@ anonymous2 ดีมันเป็นคำถามทั่วไปมาก ฉันไม่ต้องการถามเป็นพิเศษ "ฉันสามารถทำแบบสอบถาม mDNS โดยตรงจากเบราว์เซอร์ได้หรือไม่" เพราะคำตอบคือไม่ มีมาตรฐานเกี่ยวกับเรื่องนั้น แต่ไม่มีการใช้งาน ฉันกำลังมองหาทางเลือกหรือฟังก์ชั่นที่คล้ายกัน
hjf

ชื่อโฮสต์ MDNS ที่เป็นที่รู้จักนั้นทำงานได้ดีจากเบราว์เซอร์ที่ทำงานบนระบบปฏิบัติการเช่น OSX หรือ Linuces ส่วนใหญ่ที่รองรับพวกเขาแม้ว่าการเรียกดูอาจไม่ทำงาน และแน่นอนว่าพวกเขาไม่ทำงานบนระบบปฏิบัติการเช่น Windows หรือ Android ที่ไม่รองรับเว้นแต่ว่ามีการติดตั้งความสามารถเพิ่มเติม
Chris Stratton

คำตอบ:


6

ฉันไม่ได้ตระหนักถึงความสามารถในการค้นพบในท้องถิ่นทั่วไปที่สร้างขึ้นในเบราว์เซอร์ ในความเป็นจริงฉันจะพิจารณาความสามารถใด ๆ ที่จะเป็นมาตรฐานความปลอดภัยเพราะจะทำให้ผู้โจมตีสามารถโปรไฟล์เครือข่ายของคุณจากระยะไกลได้เว้นแต่จะมีขั้นตอนการโต้ตอบด้วยตนเองเพื่อเริ่มต้นซึ่งจะทำให้เวิร์กโฟลว์ช้าลง

ฉันนึกถึง 2 สิ่งที่เข้ามาใกล้:

  1. การค้นพบ Chromecast ถูกนำเข้าสู่ Chrome สิ่งนี้เคยเป็นปลั๊กอินแยกต่างหากก่อนที่มันจะถูกนำมาใช้ แต่ก็ยังต้องมีขั้นตอนแบบแมนนวลซึ่งผู้ใช้จะเริ่มต้นการค้นหาจากนั้นจึงทำการเลือกรายละเอียดอุปกรณ์ด้วยตนเองเพื่อส่งผ่านกลับไปที่หน้า / จาวาสคริปต์ (ใช้ SSDP ภายใต้หน้ากากครอบคลุม iirc)

  2. การสนับสนุนการสแกน WebBluetooth สิ่งนี้ตามโมเดลที่คล้ายคลึงกับการค้นหา Chromecast ผู้ใช้จะต้องเริ่มการสแกนจากนั้นพวกเขาจะต้องเลือกจากอุปกรณ์ที่พบโดยเบราว์เซอร์ด้วยตนเองซึ่งรายละเอียดจะถูกส่งกลับไปยังจาวาสคริปต์ในหน้านั้น

ฉันใช้วิธีการของ WebBluetooth เพื่อค้นหาสวิตช์ไฟในพื้นที่ (ฉันมีแอป BLE บน pi ศูนย์ควบคุมหลอดไฟ Belkin WeMo https://github.com/hardillb/physical-web-lightswitch ) ใช้งานได้ แต่ไม่ราบรื่นเนื่องจากต้องการการโต้ตอบจากผู้ใช้อย่างน้อย 2 ครั้งเพื่อค้นหาอุปกรณ์เดียว

แม้ว่ามันจะไม่เป็นไปตามข้อกำหนดในพื้นที่ของคุณทั้งหมด แต่ฉันคิดว่าการใช้วิธีการคลาวด์โบรคเกอร์แม้ว่าจะดำเนินการในพื้นที่ก็ตามมันจะเป็นประสบการณ์การใช้งานที่ราบรื่นยิ่งขึ้น


คำตอบที่ดี ไม่ใช่ว่าฉันกำลังมองหา แต่มันเป็นสิ่งที่ฉันคาดหวังว่าฉันเดา มี NSD API จาก W3C แต่มีการใช้งานเพียงอย่างเดียวสำหรับ Google Chrome Apps I
hjf

ดูเหมือนว่า NSD API ถูกฆ่าตายจาก doc: w3.org/TR/discovery-api
hardillb

ทฤษฎีความปลอดภัยที่เสนอที่นี่มีสิ่งต่าง ๆ ย้อนกลับ: หากมีปัญหาไม่ใช่กับสิ่งที่ค้นพบ (เบราว์เซอร์) แต่เป็นสิ่งที่ทำให้ค้นพบตัวเองได้ คุณกำลังยินดีต้อนรับความคิดเห็นของคุณเองในภูมิปัญญาของการค้นพบ แต่มันน่าสังเกตว่าเป็นเป็นอย่างมากการทำงานเริ่มต้นร่วมกันของเครื่องคอมพิวเตอร์จำนวนมากส่วนบุคคล, เครื่องพิมพ์และอุปกรณ์อื่น ๆ ความตั้งใจของเบราว์เซอร์ดำเนินการโดยผู้มีอำนาจของบุคคลที่จะหาสิ่งที่ (หรือไม่) กล่าวว่าไม่มีอะไรเกี่ยวกับความสามารถของบุคคลที่ไม่ได้รับอนุญาตที่จะค้นพบอุปกรณ์
Chris Stratton

2

หากคุณมีเว็บอินเตอร์เฟสบนอุปกรณ์และกำหนดค่าให้มีชื่อโฮสต์ MDNS ผ่านบริการตอบกลับของ MDNS เช่น bonjour หรือ avahi จากนั้นระบบปฏิบัติการที่มีคุณสมบัติคุณสามารถชี้เบราว์เซอร์ของคุณที่

https: //livingroomlight.local

หรือสิ่งที่คุณกำหนดค่าให้เรียกตัวเอง

สิ่งนี้จะทำงานนอกกรอบโดยมีเบราว์เซอร์ที่ทำงานบน OSX, iOS และ Linuces ส่วนใหญ่ทั้งหมดนี้รองรับการแก้ไขชื่อโฮสต์ MDNS ในระดับระบบ

อย่างไรก็ตามสิ่งนี้จะไม่ทำงานจาก Windows เว้นแต่คุณจะติดตั้งการสนับสนุน Add-on MDNS และมันจะไม่ทำงานกับเบราว์เซอร์ Android หุ้นแม้ว่ามันจะเป็นไปได้ที่จะสร้างแอปเบราว์เซอร์ที่กำหนดเองสำหรับ Android ที่รองรับ

โดยทั่วไปแล้วการค้นพบอินสแตนซ์ที่ไม่รู้จักบนเครือข่ายจะไม่ได้รับการสนับสนุนโดยเบราว์เซอร์ แต่โดยทั่วไปจะรองรับผ่าน API ของระบบปฏิบัติการและเครื่องมือบรรทัดคำสั่งเช่นdns-sd(OSX) และavahi-browse(Linux)

ดังนั้นในขณะที่มันไม่ปรากฏชัดเจนว่าเบราว์เซอร์สามารถค้นหาอุปกรณ์ของคุณถ้าคุณสามารถจำสิ่งที่คุณเรียกว่าหนึ่งในนั้นคุณสามารถเชื่อมต่อกับมันและมันอาจแสดงลิงค์ไปยังเพื่อนทั้งหมดของมันโดยทำ MDNS ค้นหาตัวเอง

หรือคุณสามารถยิงอาคารผู้โดยสารและรับคำตอบ สำหรับเรื่องนั้นคุณสามารถเรียกใช้ local daemon ซึ่งจะทำการค้นหา MDNS และแสดงผลลัพธ์เป็นหน้าของลิงก์ที่ให้บริการเฉพาะในส่วนต่อประสานย้อนกลับดังนั้นจึงไม่สามารถเข้าถึงเครื่องอื่นได้


1
น่าละอาย. นี่อาจเป็นทางเลือกหากได้รับการสนับสนุน ฉันสงสัยว่าเหตุผลของการไม่รองรับ mdns-sd ในเบราว์เซอร์คืออะไร? อย่างไรก็ตามฉันคิดว่าวิธีเดียวที่สิ่งต่าง ๆ ในการทำงานอย่างน่าเชื่อถือคือการใช้ MQTT เป็นวิธีการค้นพบ มีจุดสิ้นสุด "ประกาศ" บางประเภทที่อุปกรณ์จะรายงานตัวเองและแคชคำตอบเหล่านั้น
hjf

ไม่ใช่เบราว์เซอร์ที่ทำสิ่งนี้ - เป็นการนำ DNS มาใช้อย่างต่อเนื่องของระบบปฏิบัติการซึ่งหมายความว่าเบราว์เซอร์ (หรืออะไรก็ได้) สามารถใช้ชื่อเช่น livingroomlight.local MQTT จริง ๆ แล้วจะไม่ช่วยอะไรคุณ เพื่อรวบรวมผลลัพธ์และนำเสนอพวกเขาโดยไม่คำนึงว่าเป็นกล่องฮาร์ดแวร์ภูตบนพีซีหรือมนุษย์
Chris Stratton

1
แต่ android สนับสนุน mDNS ใน "แอพ" เป็นไปได้ที่จะส่งข้อความค้นหา mDNS ผ่านแอพและรับคำตอบ ทำไมไม่มีใครนำ mDNS-SD มาใช้และเปิดเผยให้ JS มีมาตรฐานที่ถูกดึงและนำไปใช้เพียงบางส่วนโดยเฉพาะเพื่อตรวจจับ Chromecast
hjf

1
อีกครั้งเพราะไม่มีใครจัดการกับ MDNS ในเว็บเบราว์เซอร์ ใช้งานได้กับชื่อโฮสต์ที่เป็นที่รู้จักซึ่ง DNS ของระบบปฏิบัติการพื้นฐานถูกขยายเพื่อรองรับ Android ไม่ได้เป็นเช่นนั้น แต่ก็มีความสามารถ MDNS สำหรับแอพผ่าน API ที่เป็นเอกลักษณ์ของ Android ที่แยกจากกันโดยไม่เกี่ยวข้องกับวิธีการแก้ไขชื่อโดเมน
Chris Stratton

1
นั่นคือจุดของฉัน ทำไมไม่มีใครผลักดันเรื่องนี้? ด้วย IoT เป็นที่แพร่หลายมากขึ้นเป็นไปได้อย่างไรที่ API ประเภทนี้เป็นล็อคเฉพาะของผู้ขายและ W3C ได้ดึงมาตรฐาน
hjf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.