Bir mobil cihaz bir ev wifi ağına bağlandığında nasıl algılanır?


10

Belirli bir mobil cihaz (cep telefonu, iPad vb.) Ağa bağlandığında (elbette kablosuz olarak) bir sunucuyu tanımanın en iyi yolu nedir?

Örnek bir durum olarak, bir kişinin ev wifi ağı, cep telefonunda düzgün bir şekilde yapılandırılmıştır. Yönlendiricinin kapsama alanına girdiğinde bağlanır (bu konuda yeni bir şey olmaz). Bu yönlendiriciye bağlandığında, ana sunucusu belirli bir programı başlatır (veya bir bildirim atar, bir dosyaya yazar vb.).

Olası bir çözümün, sunucunun sayfayı tanıyacağı şekilde telefondan başlatılan ağda barındırılan özel bir "web uygulaması" olacağını düşündüm. Ancak, telefon otomatik olarak bağlandığında yapılabilirse, bu en iyisi olacaktır.

Herhangi bir düşünce veya alternatif çözümler çok takdir edilecektir, bu yüzden şimdiden teşekkürler!


Eğer bir android telefon yerel bir web sitesi wgetting bir cron işi en kolay olurdu. Ağ tarafında bunu yapmak için RADIUS protokolünü kullanmanız ve düzgün ayarlanmış bir RADIUS sunucunuz olması gerekir.
Huckle

Neden sadece yönlendirici günlüklerinizi gözden geçirmiyorsunuz? Bu günlükler metin tabanlı olduğundan, günlükleri sorgulamak ve yalnızca ihtiyacınız olan bilgileri almak kolay olacaktır. Elbette birisi bunu yapmak için kod yazmıştır, ancak değilse basit bir alıştırma olacaktır.

Yanıtlar:


4

Bence bu kolayca gerçekleştirilebilir arp-scan.

Yükle arp-scan: sudo apt-get install arp-scan
Yerel ağdaki tüm ana bilgisayarları algılar:sudo arp-scan -l

Ağı arp-scan ile tarayan ve etkin ana bilgisayarları bulmak için çıktısını ayrıştıran bir komut dosyasını periyodik olarak (belki her 2 dakikada bir) çalıştırmak için bir crontab ayarlayabilirsiniz.

Bazen -r 3üç kez koşan bayrağa ihtiyacım vardı ; varsayılan olarak 2 kat daha iyi çalışır, bu da bazen bazı cihazları kaçırır. Böylece:

 sudo arp-scan -l -r 3 | grep {Phone Static Assigned IP} 

LG V30 + için daha iyi çalışıyor.


Bazı cihazların açık olmadıkça görünmeyebileceğine dikkat edilmelidir. Ekran açık olmadıkça nexus 4'üm görünmeyecek.
Nicolas Bouliane

3
import subprocess

if __name__ == '__main__':
    while True:
        sleep(5)
        p = subprocess.Popen("arp-scan -l | grep xx:xx:xx:xx:xx:xx", stdout=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        p_status = p.wait()
        if output:
            print "Yay, the devine is connected to your network!"
        else:
            print "The device is not present!"

Bu şekilde cihazınızın MAC'ını tarayabilirsiniz :)


2

Aslında bunun için aşağıdaki gereksinimleri karşılayan bir çözüm uygulamayı düşünüyorum:

  1. Telefonun ağda IP adresi atamasına gerek yoktur.
  2. Telefonun periyodik olarak pilini tüketecek sinyaller göndermesine gerek yoktur.
  3. Ağda çok sayıda telefon varsa, hepsi algılanır.

Amacım telefon dosya sistemini ssh ile bağlamak, ama her şey için kullanılabilir.

Diyelim ki yerel ağ 192.168.1.0 ...

Ben UDP için dinler yayın adresinden yayın yapan dair bir APP uygulayacağını Yani: 192.168.1.255. Tamamen pasif olduğu için bu uygulama pili boşaltmaz. (yalnızca bir paket alındığında etkinleşir).

Bilgisayardaki bir arka plan programı düzenli aralıklarla yayın adresine yayın gönderir 192.168.1.255. Telefon adını, kimliğini, ip adresini vb. Veren bu tür sinyallere cevap verecektir.

Şimdi bilgisayar telefonun ağda var olduğunu biliyorum ve benim durumumda sshfs mount çağırabilir.

Elbette bunun programlama işi de dahil olmak üzere çok fazla çalışmaya ihtiyacı vardır ve kolay değildir. Ama en güvenilir ve makul çözüm olacağını düşünüyorum.


1
Vay canına, temelde özel bir protokol ... böyle bir şeyin zaten var olacağını düşünürdüm.
Michael

1

Düşünebileceğim en iyi yol, söz konusu cihaza statik bir IP adresi vermek ve cihaza her X saniyede bir ping atmak ve programınızı / bildiriminizi tetiklemek için basit bir komut dosyası kullanmaktır.

Unutulmaması gerekenler: Birçok telefon uyku modundan çıkana kadar wifi ağına bağlanmayacaktır. Komut dosyanızın, muhtemelen günün saatini göz önünde bulundurarak, uyuyacak telefon ile evden ayrılan telefon arasındaki farkı söyleyebilmesi gerekir. Bundan sonra, komut dosyasının çalıştırılacak bir programı tetiklemesi veya görünmesi için bir bildirim alması önemsizdir.



0

Bunu tökezledim ve bir zamanlar benzer bir şey cevaplamaya karar verdim.

Aşağıdakileri yaptım:

1. Ping all addresses within given network and subnet (excluding network and broadcast addresses)
2. Wait for response has a timeout so that if device doesn't answer from furthest corner of your WiFi it is considered not present.
3. So we get all IPs on the net that answer to ICMP packets.
4. Then use each detected IP to ask for more and decide which device you like and which one you don't.

Benim durumumda, cihazımda çalışan bir HTTP sunucusu vardı. Bu nedenle, bağlantı noktası 80'de aslında hiçbir şey için HTTP HEAD isteği gönderdim. Cihaz yanıtladıysa ve Sunucu başlığı düzgün bir şekilde adlandırıldıysa, bu benim cihazım.

Ama önce ping atmadan hızlı gidemedim. HTTP TCP'dir ve istek büyüktür, bu nedenle WiFi için zaman aşımlarının 4 saniye olması gerekir. Bunu 253 adres için yapmak cehennem kadar yavaştır. Ancak 253 cihazınız (muhtemelen) daha az HTTP sunucunuz olmazdı. (veya sizin durumunuzda telefonlar)

Yönlendirici günlüklerini dikkate almak çok iyi bir fikir ve kolaydır. Ve hepsine ping atmaktan bile daha hızlı. Bazı yönlendiricilerin bunlara erişmek için oturum açmasına bile gerek yoktur.

Ayrıca, cihazınızın UPNP desteğine sahip olup olmadığını kontrol etmeye değer. Varsa, varlığını tespit etmek için UPNP'yi kullanabilirsiniz. Bu resmi bir çözüm olacaktır (UPNP'nin UDP'lerinin yayınını dinlemek). Ancak tüm cihazlar bunu desteklemiyor. Ancak tüm cihazlar ICMP'yi de desteklemez. (gereksiz yere bombalanmak istemezler).

Başka ilginç bir olasılık daha var. DHCP paketleri için balık tutabilir ve bir yönlendiricinin yeni bir cihaza ne zaman IP adresi verdiğini görebilirsiniz. Ancak bu, statik IP'lere sahip cihazlar için işe yaramaz. Bir şeye ihtiyaç duyana kadar ağa dokunmazlar bile. WiFi'ye bağlanmak başka bir katmandadır ve dinleyici olmak istemediğiniz sürece kolayca algılanamaz. Ağ bağdaştırıcısıyla belirli bir modda yapılabilse bile emin değilim. Bunun için ek donanıma ihtiyaç olacağını düşünüyorum.

Python'da ping elde etmek için, ping programına alt işlem yapmadan ve hızı kaybetmeden, ham soket oluşturmanız ve ICMP paketini manuel olarak oluşturmanız gerekir. Zor değil. Web üzerinde bir yerde bunun bir örneği var. Tabii ki, göndermek için ping gibi kök izinlerine ihtiyacınız olacak. Bu bir dezavantaj. Yazılımı dağıtacaksanız, kullanıcıların kök olarak çalıştırmak istemesini bekleyemezsiniz.


0

Kullandığım iki çözümüm vardı. (Python)

Çözüm 1

İlk olarak izlemek istediğim bilinen ipnumbers arping oldu. Bunu üç adımda yaptım. 1 # sadece bir ping göndermek için "-c1" kullanın. Cihaz aktif ise cevap verecektir. Fonksiyon başarılı bir şekilde çıkacaktır 2 # use "-c3" şimdi üçünden birine cevap vermek için daha fazla zaman verin. Bu genellikle zayıf bir wifi sinyali olduğunda yeterlidir. 3 # "-c10" kullanın, bu gerçekten kötü wifi sinyali olduğunda gerekli olabilir. (Eski iPad'in cevaplamak için yaklaşık 10 denemeye ihtiyacı olduğunu fark ettim) İşleri hızlandırmak için izlemek istediğim her ip numarası için ayrı İşlemler oluşturdum.

Ayrıca, başarılı olup olmamasına bağlı olarak ping aralıklarını değiştirdim. Cihazı bulursa tekrar kontrol edene kadar daha uzun süre bekler. Başarısız olursa 60 saniye içinde tekrar dener. (Evime girdiğimde ışığın yanmasını istiyorum) bu yüzden 60'lar beni sokakta bulmak için yeterli

Bu mükemmel çalıştı! Eve geldiğimde beni algıladı ve ışığı söndürdü ve gittiğimde kapandı.

Çözüm 2

Arping ağda ağır olmayabilir, ancak tüm pingleri atlamak için çözümü değiştirdim ve ahududu pi'de kendi DHCP sunucumu oluşturdum.

Sonra bir aygıt bir ipnumber alır almaz bir komut dosyası tetikleyen "taahhüt" ekledi. Bu komut dosyası, bir cihaz ipnumber alır almaz veya yenilerse, www sunucumu (Flask) bilgilendirmek için bir 'curl http API çağrısı' kullanır.

Android cihazımda, ekran kapalıyken hiçbir zaman wifi'yi kapatmayacak şekilde ayarları değiştirdim. İPhone'da mümkün olup olmadığından emin değilim. Pil üzerinde büyük bir fark yok (OnePlus 5)

İlk çözüm, belirli Mac için Bluetooth taramasını da içeriyordu. Dolayısıyla, WiFi'm telefonumda kapalı olsa bile yine de Bluetooth'u algılayacaktır. Mac adresini kullanmanın adresi eşleştirmesi veya herkesin görmesi için kullanması gerekmez.

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.