Italian Lista IP Address Rete WiFi

MarcoRome

Expert
Licensed User
Longtime User
Ciao a tutti.
Ho visto un mucchio di librerie per il WiFi e per prelevare il proprio indirizzo IP.
Ma se volessi avere tutti gli indirizzi IP collegati sulla WiFi ??
Esempio se avessi sulla mia WiFi ( esempio : 192.168.0.1 ) e sulla stessa WiFi fossero collegati 3 dispositivi avrei un qualcosa di simile:
192.168.0.105
192.168.0.107
192.168.0.108
La domanda è esiste una routine, libreria che permette di avere la lista degli IP connessi sulla WiFi ??
Grazie in anticipo
 

moster67

Expert
Licensed User
Longtime User
Sembra che vuoi un ip-scanner. C'è questo thread:

http://www.b4x.com/android/forum/threads/comment-scanner-les-ip-locales.14539/#post-82389

Ho testato il codice e mi rileva correttamente gli indirizzi IP in uso sulla mia rete. E' un po' lento ma meglio di niente.......

PS: devi aggiungere la libreria 'phone'.

codice:

B4X:
Sub RunPing
Dim Command As String
Dim Result As Int
Dim Ph As Phone
Dim Adr As String
Dim Start As Int
Dim stop As Int
Dim M As Int

Command = File.Combine(File.DirInternalCache, "command")
Adr="192.168.1."
Start=1
stop=254
For M=Start To stop
File.WriteString(File.DirInternalCache, "command", "ping -w 1 -c 1 -n " & Adr & M  & CRLF & "exit")
Dim StdOut, StdErr As StringBuilder
StdOut.Initialize
StdErr.Initialize
Result = Ph.Shell("sh", Array As String(Command), StdOut, StdErr)
Dim R As String
R=StdOut.ToString
If R.Contains("1 received") Then
Log(Adr & M & " On")
Else
Log(Adr & M & " Off")
End If
Next
End Sub
 

udg

Expert
Licensed User
Longtime User
Temo che la lentezza riscontrata sia "normale".
In effetti il codice prova 254 invii del comandi ping, dove ciascun test termina dopo aver ricevuto 1 echo (-c1) oppure che sia scaduto il timeout (-t1).
Il problema lo pongono gli indirizzi non utilizzati dove ovviamente si va sempre in timeout.

Tempo fa lessi di un comando nella forma: ping -c1 -t500 addr1 addr2 addr3..
in pratica 500ms in tutto per testare i 3 indirizzi. Magari si potrebbe tentare qualcosa di simile raggruppando i 254 addr desiderati in blocchi di 8/16 indirizzi con un tempo limite complessivo "accettabile".

Un'altra riflessione: io spesso configuro in modo da NON rispondere agli echo request, quindi il metodo di sopra non funzionerebbe verso il mio PC (che ha il suo bravo firewall attivo).

Umberto
 

moster67

Expert
Licensed User
Longtime User
Usando il commando ping, la scanzione si rallenta.

Se invece stavi cercando una porta specifica da controllare se presente su ogni ip presente sulla rete LAN, allora credo che puoi scrivere codice che viene eseguito molto piu' veloce usando l'oggetto 'socket' della libreria 'network'.
 

moster67

Expert
Licensed User
Longtime User
Un'altra riflessione: io spesso configuro in modo da NON rispondere agli echo request, quindi il metodo di sopra non funzionerebbe verso il mio PC (che ha il suo bravo firewall attivo).

Umberto

Giusto - questo è un riflessione corretto
 

MarcoRome

Expert
Licensed User
Longtime User
Grazie ad entrambi. Ho provato a postare su "Question" vediamo se qualcuno ha risolto in modo diverso.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Si potrebbe fare una prova inviando una richiesta ping su 192.168.1.255 e vedere cosa succede.

Io ho installato un programma sul mio Android che fa proprio quello che chiedi tu, e ci mette circa 2 secondi, quindi non credo che faccia una scansione di tutti gli indirizzi, mi verrebbe da pensare che usa un altro metodo, ad esempio proprio quello che ti ho suggerito, ma non ho idea se funziona.

Potrebbe essere una idea decompilare il programma che ho io per vedere cosa fa ??

Sergio
 

LucaMs

Expert
Licensed User
Longtime User
Come dice Umberto-udg, non tutti i dispositivi rispondono al ping.

Comunque, si può usare il parametro -w per settare il timeout e velocizzare la ricerca, dato che è in rete locale si può usare un valore basso (millisecondi)
 
Last edited:

MarcoRome

Expert
Licensed User
Longtime User
Grazie Luca, speriamo che qualcuno della comunità abbia già avuto il problema e risolto la questione con una routine ad hoc
 

LucaMs

Expert
Licensed User
Longtime User
Come dice Umberto-udg, non tutti i dispositivi rispondono al ping.

Comunque, si può usare il parametro -w per settare il timeout e velocizzare la ricerca, dato che è in rete locale si può usare un valore basso (millisecondi)


[come non detto: -w in Android è in secondi, non in millisecondi. Da prove fatte, come minimo servono 3 secondi per ogni ping, quindi per 255 sono... tanti secondi :mad::D]
 
Top