Web tarayıcısında IoT cihazlarını mı tespit ediyorsunuz?


11

Son zamanlarda Xiaomi'den birkaç wifi rölesi aldım. Şimdiye kadar sağlam olsalar da, Xiaomi'nin uygulamasını gerçekten sevmiyorum. Ancak, aslında hem LAN'da hem de internette çalıştığı fikrini seviyorum. LAN'da, Xiaomi'nin sunucularının Çin'de olduğu düşünüldüğünde açılıp kapanmaları çok hızlıdır.

Bu yüzden kendi ESP8266 tabanlı rölemi rulo yapmak istiyorum (Donanımı hazırlayabileceğimi biliyorum, bu yüzden bu bir bonus). Benim sorunum, bir web sayfasından ağımdaki röleleri otomatik olarak nasıl tespit edebilirim?

Bir "Uygulama" dan şeyleri tespit etmek için SSDP, mDNS-SD veya UPNP kullanabilirsiniz. Ancak bunun web tarayıcıdan mümkün olup olmadığı hakkında bilgi bulamadım (temel olarak Android'de Chrome). Hava durumu istasyonu web sayfamı Aşamalı Web Uygulaması olarak değiştirdiğim için bağlandım. Yüklemeniz gereken uygulamalar değil, yalnızca web sayfaları olma fikrini gerçekten seviyorum. PWA'lar da boşluğu çevrimdışı modla doldurur.

Yine de, "zor" bölümün (röleleri LAN dışından açıp kapatmak) bir MQTT sunucusu aracılığıyla çözülmesi önemsizdir. Ancak harici MQTT sunucusuna güvenmemeyi tercih ederim. Eğer LAN'daysam, rölelerle doğrudan konuşmak istiyorum. Değilse, komutu MQTT aracılığıyla gönderin.

Tabii ki, röleleri sorgulamak için sunucuya güvenebilirdim, ancak bu durumda (MQTT sunucum "bulut" üzerindeyse) bir internet bağlantısına veya bir ev sahibi sunucuya ihtiyacım olacaktı. Evde bir sunucum var ve olmasam bile, bir ahududu pi kolayca boşluğu doldurabilir. Ancak ideal, LAN üzerinden cihazlarla konuşurken bir sunucuya bile ihtiyaç duymayacaktır (bu durumda Wifi). Ben mümkün olduğunca P2P tutmak için tercih ve sadece WAN olduğum zaman için bir düşüş olarak MQTT kullanın (MQTT CG-NAT ve bağlantı noktası yönlendirme sorunları çözer).


1
Siteye hoşgeldiniz, hjf! Şu anda, sorunuz oldukça geniş. Biraz daha spesifik olmanız yardımcı olabilir: örneğin, şu anda hangi dilleri kullanıyorsunuz ve hangi hatalarla / belirli sorunlarla karşılaşıyorsunuz?
anonymous2

1
@ anonymous2 çok genel bir soru. Özellikle "mDNS sorgularını doğrudan tarayıcıdan yapabilir miyim?" Sorusunu sormak istemiyorum. çünkü cevap HAYIR. Bununla ilgili bir standart var ama uygulama yok. Alternatifler veya benzer işlevler arıyorum.
yf

Bilinen MDNS ana bilgisayar adları, OSX veya çoğu Linuces gibi bir işletim sisteminde çalışan bir tarayıcıdan iyi çalışır, ancak tarama muhtemelen işe yaramaz. Ve elbette, ek yetenekler yüklenmedikçe, Windows veya Android gibi onları desteklemeyen bir işletim sisteminde çalışmazlar.
Chris Stratton

Yanıtlar:


6

Bir tarayıcıda yerleşik herhangi bir genel yerel keşif özelliğinin farkında değilim. Aslında, herhangi bir kabiliyetin, saldırganların, ağını başlatmak için manuel bir etkileşim adımı olmadıkça, ağınızı uzaktan profillendirmesine izin vereceği için, bu yüzden hedeflediğinizi düşündüğüm iş akışını yavaşlatacak bir güvenlik açığı olarak düşünürüm.

Yakınlaşan 2 şeyi düşünebilirim:

  1. Chromecast keşfedilebilirliği Chrome'da pişirildi. Bu, içe aktarılmadan önce ayrı bir eklenti idi. Ancak bu yine de kullanıcının bir aramayı tetiklemesi için manuel bir adım ve ardından cihazın ayrıntılarının sayfaya / javascript'e aktarılacağı manuel bir seçim gerektirir. (bu, iirc kapaklarının altında SSDP kullanır)

  2. WebBluetooth tarama desteği. Bu, Chromecast keşfine benzer bir modeli izler, Kullanıcı taramayı başlatmalıdır, daha sonra tarayıcı tarafından bulunan ve sayfadaki javascript'e aktarılan cihazlardan manuel olarak seçmeleri gerekir.

Yerel bir ışık anahtarını keşfetmek için WebBluetooth yaklaşımını kullandım (Belkin WeMo ampulünü kontrol eden pi sıfır üzerinde bir BLE uygulamam var https://github.com/hardillb/physical-web-lightswitch ). Çalışır, ancak tek bir cihazı bulmak için en az 2 kullanıcı etkileşimi gerektirdiği için sorunsuz değildir.

Tüm yerel gereksinimlerinizi karşılamasa da, yerel olarak çalışırken bile bulut aracısı yaklaşımını kullanmanın daha sorunsuz bir kullanıcı deneyimi olacağını düşünüyorum.


Güzel cevap. Aradığım şey değildi, ama sanırım bekliyordum. W3C'den NSD API'sı var, ancak tek uygulama Google Chrome Uygulamaları içindir. I
hjf

NSD API'sının doc'den
hardillb

Burada önerilen güvenlik teorisinin geriye dönük bir şeyleri vardır: bir sorun varsa, keşfi (tarayıcıyı) yapan şey değil, kendini keşfedilebilir yapan şeydir. Keşfedilebilirliğin bilgeliği hakkında kendi görüşünüze hoş geldiniz, ancak birçok kişisel bilgisayarın, yazıcı ve diğer cihazın son derece yaygın varsayılan davranışı olduğunu belirtmek gerekir . İstekli bir tarafından işletilen bir tarayıcı yetkili şey (veya değil) bulmak için partiye cihazları keşfetmek için yetkisiz bir partinin yeteneği hakkında bilgi vermez.
Chris Stratton

2

Bir aygıtta web arabiriminiz varsa ve bunu bonjour veya avahi gibi bir MDNS yanıtlayıcı hizmeti aracılığıyla bir MDNS ana bilgisayar adına sahip olacak şekilde yapılandırdıysanız, özellikli işletim sistemlerinden tarayıcınızı şu adrese yönlendirebilirsiniz:

https: //livingroomlight.local

Ya da onu kendini çağırmak için yapılandırdıysanız.

Bu, tümü sistem düzeyinde MDNS ana bilgisayar adı çözümlemesini destekleyen OSX, iOS ve çoğu Linuces üzerinde çalışan tarayıcılarla birlikte çalışır.

Ancak, eklenti MDNS desteği yüklemediğiniz sürece Windows'dan çalışmaz ve stok Android tarayıcılarıyla çalışmaz, ancak Android'i destekleyen özel tarayıcı uygulamaları yapmak mümkündür.

Ağdaki bilinmeyen örnekleri keşfetmek genellikle bir tarayıcı tarafından desteklenmez, ancak genellikle işletim sistemi API'ları ve dns-sd(OSX) ve avahi-browse(Linux) gibi komut satırı araçlarıyla desteklenir .

Dolayısıyla, bir tarayıcının cihazlarınızı bulabileceği açık görünmese de , bunlardan birini aradığınızı hatırlarsanız, ona bağlanabilirsiniz ve bir MDNS yaparak potansiyel olarak tüm akranlarına bağlantılar gösterebilir kendini ara.

Veya bir terminal kurabilir ve kendinize bir cevap alabilirsiniz. Bu nedenle, bir MDNS araması yapacak ve sonucu yalnızca geri döngü arabiriminde sunulan ve böylece başka bir makine tarafından erişilemeyen bağlantıların bir sayfası olarak gösteren yerel bir arka plan programı çalıştırabilirsiniz .


1
Utanç verici. Destekleniyorsa bu bir alternatif olabilir. Tarayıcılarda mdns-sd'yi desteklememenin mantığını merak ediyorum. Her neyse, işlerin güvenilir bir şekilde çalışmasının tek yolunun MQTT'yi bir keşif yöntemi olarak kullanmak olacağını düşünüyorum. Cihazların kendilerini raporlayabilecekleri bir tür "anons" bitiş noktası bulundurun ve bu yanıtları önbelleğe alın.
hjf

Bunlardan herhangi birini yapan tarayıcı değil - işletim sisteminin DNS'in genişletilmiş uygulamasıdır, yani bir tarayıcı (veya başka bir şey) livingroomlight.local MQTT gibi bir ad kullanabilir gerçekten yardımcı olmaz - bir şey olacak ister bir donanım kutusu, ister bilgisayarda bir arka plan programı, ister bir insan olsun, sonuçları toplamak ve sunmak için.
Chris Stratton

1
Ancak android "apps" mDNS destekliyor. Uygulamalar aracılığıyla mDNS sorguları göndermek ve yanıt almak mümkündür. Neden kimse mDNS-SD'yi uygulayıp JS'ye maruz bırakmıyor? Özellikle Chromecast'i saptamak için çekilmiş ve sadece kısmen uygulanmış bir standart vardı.
hjf

1
Yine, hiç kimse web tarayıcılarında MDNS ile ilgilenmiyor; temel işletim sisteminin DNS'sinin onu desteklemek üzere genişletildiği bilinen ana bilgisayar adları için çalışır. Android, alan adlarını nasıl çözdüğü ile ilgisi olmayan ayrı, Android'e özgü bir API aracılığıyla uygulamalara MDNS özellikleri sunuyor olsa da.
Chris Stratton

1
Demek istediğim bu. Neden kimse bunu zorlamıyor? IoT gittikçe yaygınlaştıkça, bu tür API'lerin satıcıya özel olarak kilitlenmesi ve W3C'nin standardı çekmesi nasıl mümkün olabilir?
hjf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.