웹 브라우저에서 IoT 장치를 감지 하시겠습니까?


11

최근에 Xiaomi에서 두 개의 wifi 릴레이를 구입했습니다. 지금까지는 견고했지만 Xiaomi의 앱은 정말 싫어합니다. 그러나 실제로 LAN과 인터넷에서 모두 작동한다는 아이디어가 마음에 듭니다. LAN에 있으면 Xiaomi의 서버가 중국에 있다는 것을 고려할 때 매우 빠르게 켜고 끌 수 있습니다.

그래서 내 ESP8266 기반 릴레이를 롤백하고 싶습니다 (하드웨어를 준비 할 수 있다는 것을 알고 있으므로 보너스입니다). 내 문제는 웹 페이지에서 네트워크의 릴레이를 자동으로 감지하는 방법입니다.

"앱"에서 SSDP, mDNS-SD 또는 UPNP를 사용하여 사물을 감지 할 수있었습니다. 그러나 웹 브라우저 (기본적으로 Android의 Chrome)에서 가능하다는 정보를 찾지 못했습니다. 기상 관측소 웹 페이지를 프로그레시브 웹 앱으로 변경 한 이후로 나는 갈망했습니다. 나는 당신이 설치 해야하는 앱이 아닌 웹 페이지라는 것을 좋아합니다. 그리고 PWA는 오프라인 모드로도 그 차이를 메 웁니다.

"어려운"부분 (LAN 외부에서 릴레이를 켜고 끄는)이 MQTT 서버를 통해 해결하기가 쉽지 않다는 것은 이상합니다. 그러나 외부 MQTT 서버에 의존하지 않는 것이 좋습니다. LAN을 사용하는 경우 릴레이와 직접 대화하고 싶습니다. 그렇지 않은 경우 MQTT를 통해 명령을 보내십시오.

물론 릴레이를 쿼리하기 위해 서버에 의존 할 수 있지만이 경우 인터넷 연결 (MQTT 서버가 "클라우드"에있는 경우) 또는 홈 호스트 서버가 필요합니다. 나는 집에 서버가 있고, 그렇지 않은 경우에도 라즈베리 파이가 쉽게 그 차이를 채울 수 있습니다. 그러나 LAN을 통해 장치와 통신 할 때 서버가 필요하지 않은 것이 이상적입니다 (이 경우 Wifi). P2P를 가능한 한 많이 유지하고 WAN에있을 때 MQTT를 폴백으로 만 사용하는 것이 좋습니다 (MQTT는 CG-NAT 및 포트 전달 문제를 해결합니다).


1
hjf 사이트에 오신 것을 환영합니다! 현재 귀하의 질문은 매우 광범위합니다. 좀 더 구체적 일 수 있다면 도움이 될 것입니다. 예를 들어, 현재 사용중인 언어, 어떤 오류 / 특정 문제가 발생합니까?
anonymous2

1
@ anonymous2 글쎄 그것은 매우 일반적인 질문입니다. 구체적으로 "브라우저에서 직접 mDNS 쿼리를 할 수 있습니까?"라는 질문을하고 싶지 않습니다. 대답은 아니오이기 때문입니다. 그것에 대한 표준이 있지만 구현은 없습니다. 대안 또는 유사한 기능을 찾고 있습니다.
hjf

알려진 MDNS 호스트 이름은 OSX 또는 대부분의 Linuces와 같은 운영 체제에서 실행되는 브라우저에서 제대로 작동 하지만 브라우징 이 작동하지 않을 수 있습니다. 물론 추가 기능이 설치되어 있지 않으면 지원하지 않는 Windows 또는 Android와 같은 운영 체제에서는 작동하지 않습니다.
Chris Stratton

답변:


6

브라우저에 내장 된 일반적인 로컬 검색 기능을 알지 못합니다. 실제로 수동으로 상호 작용 단계를 시작하지 않는 한 공격자가 네트워크를 원격으로 프로파일 링 할 수 있기 때문에 모든 기능을 보안상의 이점으로 생각합니다.

나는 가까운 두 가지를 생각할 수 있습니다.

  1. Chromecast 검색 기능이 Chrome에 구현되었습니다. 롤인하기 전에 별도의 플러그인이었습니다. 그러나 여전히 사용자가 검색을 시작한 다음 수동으로 장치 세부 정보를 페이지 / 자바 스크립트로 전달하는 수동 단계가 필요합니다. (이것은 커버 iirc에서 SSDP를 사용합니다)

  2. WebBluetooth 스캔 지원 이것은 Chromecast 검색과 유사한 모델을 따릅니다. 사용자는 검색을 시작한 다음 브라우저에서 찾은 기기에서 세부 정보가 페이지의 자바 스크립트로 다시 전달되는 기기에서 수동으로 선택해야합니다.

WebBluetooth 접근 방식을 사용하여 로컬 조명 스위치를 발견했습니다 (벨킨 WeMo 전구 https://github.com/hardillb/physical-web-lightswitch를 제어하는 pi zero에 BLE 앱이 있습니다 ). 그것은 작동하지만 단일 장치를 발견하기 위해서는 최소한 2 번의 사용자 상호 작용이 필요하므로 완벽하지 않습니다.

모든 로컬 요구 사항을 충족하지는 않지만 로컬에서 작동 할 때조차도 클라우드 브로커 접근 방식을 사용하면 더 부드러운 사용자 경험이 될 것이라고 생각합니다.


좋은 대답입니다. 내가 찾고 있었던 것은 아니지만, 내가 추측했던 것입니다. W3C의 NSD API가 있지만 Chrome Chrome 용으로 만 구현됩니다. I
hjf

NSD API가 문서에서 종료 된 것 같습니다 : w3.org/TR/discovery-api
hardillb

여기에 제안 된 보안 이론에는 문제가 있습니다. 문제가 있으면 발견 (브라우저)하는 것이 아니라 오히려 스스로 발견 할 수있는 것입니다. 검색 가능성에 대한 자신의 의견은 환영 할 만하지 만 많은 개인용 컴퓨터, 프린터 및 기타 장치의 매우 일반적인 기본 동작 이라는 점은 주목할 가치가 있습니다. 권한 이있는 당사자가 장치를 검색 할 수 있는 권한 을 가진 사람이 무언가를 찾거나하지 않는 것에 대한 브라우저 의 의지 는 아무 말도하지 않습니다.
Chris Stratton

2

장치에 웹 인터페이스가 있고 bonjour 또는 avahi와 같은 MDNS 응답기 서비스를 통해 MDNS 호스트 이름을 갖도록 구성한 경우, 운영 체제에서 브라우저를 가리킬 수 있습니다

https : //livingroomlight.local

또는 자신이 호출하도록 구성한 모든 것.

이것은 OSX, iOS 및 대부분의 Linuces에서 실행되는 브라우저에서 즉시 작동하며 시스템 수준에서 MDNS 호스트 이름 확인을 지원합니다.

그러나 추가 MDNS 지원을 설치하지 않으면 Windows에서 작동하지 않으며이를 지원하는 Android 용 사용자 정의 브라우저 앱을 만들 수는 있지만 기본 Android 브라우저에서는 작동하지 않습니다.

네트워크에서 알 수없는 인스턴스 검색 은 일반적으로 브라우저에서 지원되지 않지만 일반적으로 운영 체제 API 및 dns-sd(OSX) 및 avahi-browse(Linux) 와 같은 명령 줄 도구를 통해 지원됩니다 .

따라서 브라우저가 장치를 찾을 수 있다는 것은 분명하지 않지만 , 단순히 장치 중 하나를 호출 한 것을 기억하면 연결할 수 있으며 MDNS를 수행하여 모든 피어에 대한 링크를 잠재적으로 표시 할 수 있습니다 자체 검색

또는 터미널을 시작하여 스스로 답변을 얻을 수 있습니다. 이를 위해 MDNS 검색을 수행하는 로컬 데몬을 실행할 수 있으며 결과를 루프백 인터페이스 에서만 제공되는 링크 페이지로 표시 하므로 다른 시스템에서는 액세스 할 수 없습니다.


1
그런 수치심. 지원되는 경우 대안이 될 수 있습니다. 브라우저에서 mdns-sd를 지원하지 않는 근거가 무엇인지 궁금합니다. 어쨌든, 안정적으로 작동하는 유일한 방법은 MQTT를 검색 방법으로 사용하는 것입니다. 장치가 자신을보고 할 수있는 일종의 "발표"엔드 포인트를 갖고 해당 답변을 캐시하십시오.
hjf

브라우저가 아닙니다. 운영 체제의 확장 DNS 구현입니다. 즉, 브라우저 (또는 다른 것)는 livingroomlight.local과 같은 이름을 사용할 수 있습니다. 로컬 MQTT는 실제로 도움이되지 않습니다. 하드웨어 상자, PC의 데몬 또는 사람에 관계없이 결과를 수집하여 표시합니다.
Chris Stratton

1
그러나 "앱"의 안드로이드 지원 mDNS. 앱을 통해 mDNS 쿼리를 보내고 응답을받을 수 있습니다. 어떻게 아무도 mDNS-SD를 구현하여 JS에 노출시키지 않습니까? Chromecast를 감지하기 위해 부분적으로 만 구현 된 표준이있었습니다.
hjf

1
웹 브라우저에서 아무도 MDNS를 다루지 않기 때문입니다. 기본 운영 체제의 DNS가이를 지원하도록 확장 된 알려진 호스트 이름에 대해 작동합니다. Android는 도메인 이름을 확인하는 방법과 관련이없는 별도의 Android 고유 API를 통해 앱에 MDNS 기능을 제공하지는 않습니다.
Chris Stratton

1
그게 내 요점이야 왜 아무도 이것을 밀지 않습니까? IoT가 점점 일반화되면서 어떻게 이러한 종류의 API가 공급 업체별로 고정되어 있으며 W3C가 표준을 끌어낼 수 있었습니까?
hjf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.