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.