Domanda Trovare tutti gli IP connessi alla rete

fisica-all

Utente Jade
13 Aprile 2014
1,427
162
332
914
Ciao a tutti,
ho bisogno di creare una comunicazione fra due dispositivi connessi alla stessa rete domestica (per esempio un router di casa semplicissimo). Conoscendo l'IP del pc che fara' da server ovviamente e' semplice, ma qualora non lo conoscessi, come posso creare un veloce broadcast senza dover scorrere tutti gli IP possibili della sottorete? Esiste un metodo veloce?
Grazie a tutti :D
 
Esiste un indirizzo apposta per fare broadcast, dipende dalla tua subnet ma a intuito sarà 192.168.255.255 oppure 192.168.1.255 oppure 192.168.1.255. Il problema è che la maggior parte dei sistemi operativi non risponde alle richieste fatte in broadcast. In Linux puoi controllare questo comportamento modificando a 0 il file /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
Codice:
icmp_echo_ignore_broadcasts - BOOLEAN
    If set non-zero, then the kernel will ignore all ICMP ECHO and
    TIMESTAMP requests sent to it via broadcast/multicast.
    Default: 1

Se vuoi fare un test puoi usare ping -b 192.168.255.255

Se non vuoi modificare quel file (che è impostato in quel modo per ragioni di sicurezza) sei costretto a pingare tutti i possibili indirizzi della sottorete.
 
  • Mi piace
Reazioni: fisica-all
Piu' che non voler modificare il file, sto cercando di creare un minisistema in cui se due dispositivi si trovano nella stessa rete possono comunicare
In parole povere quindi avro' un'app installata sul dispositivo S (per esempio un pc) e un'app installata su un dispositivo X (per esempio un android). Qualora i due si trovassero nella stessa rete, vorrei che X riuscisse a comunicare "da solo" con S, senza conoscerne l'IP
 
Io ho risolto con un broadcast UDP, è sufficiente che il tuo software si metta in ascolto su una determinata porta, a quel punto puoi scoprire in breve tempo tutti gli host dove è in esecuzione. La questione firewall su Windows dovrebbe risolversi quando premi "consenti" in seguito alla prima richiesta del programma per usare listen, a meno di firewall di terze parti.
 
  • Mi piace
Reazioni: fisica-all
La flag che ti ho indicato blocca l'ICMP broadcast. Se scrivi un programma tuo, puoi ricevere e inviare pacchetti in broadcast in modo analogo a quanto ti ho descritto prima. Ci sarà qualche flag particolare (equivalente al -b di ping) per consentire di ricevere/inviare pacchetti broadcast. In C si chiama SO_BROADCAST, in Python dipende da cosa stai usando.
 
  • Mi piace
Reazioni: fisica-all