Bagaimana cara mendeteksi perangkat seluler ketika terhubung ke jaringan wifi rumah?

10

Apa cara terbaik untuk membuat server mengenali ketika perangkat seluler tertentu (ponsel, iPad, dll.) Terhubung ke jaringan (tentu saja secara nirkabel)?

Sebagai contoh situasi, seseorang memiliki jaringan wifi rumah yang dikonfigurasi dengan benar di ponselnya. Ketika dia berada dalam jangkauan router, itu akan terhubung (tidak ada yang baru tentang itu). Setelah terhubung ke router itu, server rumahnya akan meluncurkan program tertentu (atau melempar pemberitahuan, menulis ke file, dll.).

Saya pikir solusi yang mungkin adalah "aplikasi web" khusus yang di-host-jaringan yang akan diluncurkan dari telepon sehingga server akan mengenali halaman yang dipanggil. Namun, jika ini bisa dilakukan ketika telepon terhubung secara otomatis, itu yang terbaik.

Setiap pemikiran atau solusi alternatif akan sangat dihargai, jadi terima kasih sebelumnya!

Ivan I.
sumber
Jika ini adalah ponsel android, tugas cron yang mengompol situs web lokal akan lebih mudah. Untuk melakukannya dari sisi jaringan Anda harus menggunakan protokol RADIUS dan memiliki server RADIUS yang diatur dengan benar.
Huckle
Mengapa tidak meninjau log router Anda saja. Karena log ini berbasis teks, akan mudah untuk menanyakan log dan hanya mendapatkan informasi yang Anda butuhkan. Tentunya seseorang telah menulis kode untuk melakukan ini tetapi jika tidak, ini akan menjadi latihan sederhana.

Jawaban:

4

Saya pikir ini dapat dengan mudah dicapai arp-scan.

Instal arp-scan: sudo apt-get install arp-scan
Deteksi semua host di jaringan lokal:sudo arp-scan -l

Anda dapat mengatur crontab untuk secara berkala (setiap 2 menit mungkin) menjalankan skrip yang memindai jaringan dengan arp-scan dan mem-parsing hasilnya untuk menemukan host yang aktif.

Terkadang saya membutuhkan -r 3bendera, yang menjalankannya tiga kali; berfungsi jauh lebih baik sebagai default 2 kali, yang terkadang melewatkan beberapa perangkat. Jadi:

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

berfungsi lebih baik bagi saya untuk LG V30 +.

Eric Carvalho
sumber
Perlu dicatat bahwa beberapa perangkat mungkin tidak muncul kecuali jika dihidupkan. Nexus 4 saya tidak akan muncul kecuali layar menyala.
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!"

Dengan cara ini Anda dapat memindai MAC perangkat Anda :)

ZaBiC
sumber
2

Saya sebenarnya sedang mempertimbangkan untuk mengimplementasikan solusi untuk ini yang memenuhi persyaratan berikut:

  1. Telepon tidak perlu menetapkan alamat IP pada jaringan.
  2. Telepon tidak perlu secara berkala mengirimkan sinyal yang akan menghabiskan baterainya.
  3. Jika ada banyak telepon di jaringan, semuanya akan terdeteksi.

Maksud saya adalah untuk me-mount filesystem ponsel dengan ssh, tetapi bisa digunakan untuk apa saja.

Katakanlah jaringan lokal adalah 192.168.1.0 ...

Jadi saya akan menerapkan APP yang mendengarkan untuk UDP siaran dari alamat broadcast: 192.168.1.255. Aplikasi ini tidak akan menguras baterai karena benar-benar pasif. (Ini hanya menjadi aktif ketika paket diterima).

Daemon di komputer akan secara berkala mengirimkan siaran ke alamat siaran 192.168.1.255. Telepon akan membalas sinyal seperti itu dengan memberikan nama, id, alamat ip, dll.

Sekarang komputer tahu bahwa telepon ada di jaringan dan untuk kasus saya dapat memanggil sshfs mount.

Tentunya ini membutuhkan banyak pekerjaan, termasuk pekerjaan pemrograman, dan tidak mudah. Tapi saya pikir itu akan menjadi solusi paling andal dan masuk akal.

d_inevitable
sumber
1
Wow, jadi pada dasarnya protokol khusus ... orang akan berpikir sudah ada sesuatu seperti ini.
Michael
1

Cara terbaik yang dapat saya pikirkan adalah memberi perangkat tersebut alamat IP statis, dan menggunakan skrip sederhana untuk melakukan ping perangkat tersebut setiap X detik dan memicu program / pemberitahuan Anda.

Hal-hal yang perlu diperhatikan: Banyak ponsel tidak dapat terhubung ke jaringan wifi hingga bangun dari tidur. Skrip Anda harus dapat membedakan antara telepon yang akan tidur dan telepon yang meninggalkan rumah, mungkin dengan mempertimbangkan waktu hari. Setelah itu, membuat skrip memicu program untuk dijalankan atau pemberitahuan yang muncul adalah sepele.

Jeff Welling
sumber
0

Saya menulis sebuah skrip yang melakukan hal serupa menggunakan arp-scan dan alamat IP statis pada iPhone.

Anda dapat menemukan kode di sini: https://github.com/blackairplane/pydetect

Itu perlu dibersihkan karena saya baru di Python, tapi saya pikir itu menggambarkan konsep.

JamieHoward
sumber
0

Saya tersandung pada ini dan ketika saya pernah melakukan sesuatu yang serupa memutuskan untuk mengirim jawaban.

Saya melakukan yang berikut:

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.

Dalam kasus saya, saya memiliki server HTTP yang berjalan di perangkat saya. Jadi saya baru saja mengirim permintaan HTTP HEAD untuk dasarnya tidak ada pada port 80. Jika perangkat merespons dan Server header dinamai dengan benar, maka ini adalah perangkat saya.

Tapi aku tidak bisa cepat tanpa ping dulu. HTTP adalah TCP dan permintaan besar, jadi batas waktu harus 4 detik untuk WiFi. Melakukan ini untuk 253 alamat lambat sekali. Tetapi Anda tidak akan memiliki 253 perangkat (mungkin) lebih sedikit server HTTP. (atau dalam kasus Anda, telepon)

Mempertimbangkan log router adalah ide yang sangat bagus, dan mudah. Dan bahkan lebih cepat daripada melakukan ping semua. Beberapa router bahkan tidak perlu masuk untuk mendapatkannya.

Juga, ada baiknya memeriksa apakah perangkat Anda memiliki dukungan UPNP. Jika ya, Anda dapat menggunakan UPNP untuk mendeteksi keberadaannya. Ini akan menjadi solusi resmi (mendengarkan siaran untuk UDP dari UPNP). Tetapi semua perangkat tidak mendukungnya. Tetapi semua perangkat tidak mendukung ICMP juga. (Mereka tidak ingin dibombardir dengan sia-sia).

Ada kemungkinan menarik lainnya. Anda dapat memancing paket DHCP dan melihat kapan router memberi perangkat baru alamat IP. Tetapi ini tidak akan bekerja untuk perangkat dengan IP statis. Mereka bahkan tidak akan menyentuh jaringan sampai mereka membutuhkan sesuatu. Menghubungkan ke WiFi itu sendiri ada di lapisan lain dan tidak dapat dengan mudah dideteksi kecuali jika Anda ingin bertindak sebagai sniffer. Saya tidak yakin bahkan jika itu bisa dilakukan dengan adaptor jaringan dalam mode yang menjanjikan. Saya pikir perangkat keras tambahan akan diperlukan untuk ini.

Untuk mencapai ping dengan Python, tanpa melakukan subproses ke program ping dan kehilangan kecepatan, Anda harus membuat soket mentah dan membuat paket ICMP secara manual. Itu tidak sulit. Ada contoh di suatu tempat di web. Tentu saja, untuk mengirimnya Anda perlu izin root seperti halnya ping. Ini adalah kelemahannya. Jika Anda akan mendistribusikan perangkat lunak, Anda tidak dapat mengharapkan pengguna ingin menjalankannya sebagai root.

Dalen
sumber
0

Saya punya dua solusi yang saya gunakan. (Python)

Solusi 1

Pertama adalah untuk mengetahui ipnumber yang dikenal yang ingin saya lacak. Saya melakukan ini dalam tiga langkah. 1 # gunakan "-c1" untuk hanya mengirim satu ping. Jika perangkat aktif itu akan menjawab dan. Fungsi akan keluar dengan sukses 2 # gunakan "-c3" sekarang beri lebih banyak waktu untuk membalas pada salah satu dari tiga. Ini biasanya cukup ketika itu sinyal wifi yang buruk. 3 # gunakan "-c10" ini mungkin diperlukan ketika sinyal wifi benar-benar buruk. (Melihat iPad lama membutuhkan sekitar 10 upaya untuk menjawab) Untuk mempercepat hal-hal yang saya buat Proses terpisah untuk setiap nomor ip yang ingin saya lacak.

Saya juga mengubah interval ping tergantung pada apakah itu berhasil atau tidak. Jika menemukan perangkat itu akan menunggu lebih lama sampai memeriksa lagi. Jika gagal, itu akan mencoba lagi dalam 60 detik. (Saya ingin lampu menyala ketika saya memasuki rumah saya) sehingga 60-an sudah cukup untuk menemukan saya di jalan

Ini bekerja dengan sempurna! Ketika saya sampai di rumah, saya merasakan dan mematikan lampu, dan mati ketika saya pergi.

Solusi 2

Arping mungkin tidak berat di jaringan tetapi saya mengubah solusi untuk melewati semua ping dan membuat server DHCP saya sendiri di raspberry pi saya.

Saya kemudian menambahkan "saat komit" yang memicu skrip segera setelah perangkat mendapat nomor telepon. Skrip ini menggunakan 'panggilan API http curl' untuk memberi tahu server www saya (Labu) segera setelah perangkat mendapat atau memperbarui ipnumber itu.

Di Android saya, saya mengubah pengaturan untuk tidak pernah mematikan wifi saat layar mati. Tidak yakin apakah itu mungkin di iPhone. Tidak ada perbedaan besar pada baterai (OnePlus 5)

Solusi pertama juga termasuk pemindaian Bluetooth untuk Mac tertentu. Jadi, bahkan jika WiFi saya mati di ponsel saya masih akan merasakan Bluetooth. Menggunakan alamat Mac tidak perlu memasangkannya atau membuatnya tersedia untuk dilihat semua orang.

Christian Grenfeldt
sumber