Italian [RISOLTO] B4A - Capire se un IP Pubblico è raggiungibile/connesso

Sabotto

Well-Known Member
Licensed User
Tempo fa con l'aiuto del forum sono riuscito a "interrogare" degli IP Pubblici.
Charisco che sono siti dove c'è un normale router piu o meno domestico (tipo FritzBox, Digicom, ecc) che hanno tutti un IP Pubblico statico assegnato.
A me serve sapere, in pratica, se il router di quel sito è raggiungibile, cioè se su quel sito c'è connessione Internet, niente di più. Indipendentemente poi dalla ragione per cui la connessione non dovesse esserci (router rotto, assenza di corrente, ecc).
Ora ho aggiunto dei nuovi IP che però non riesco a "interrogare"
Allego il codice scremato di tutto che interroga 4 indirizzi IP. Solo il primo (che ho volutamente lasciato per fare da raffronto) dà esito positivo, mentre i restanti 3 no.
Credo che dipenda da HTTPS, forse dal router installato,e forse dalla porta che in uno di essi è 8080
Gli stessi 4 IP, se vengono digitati nella barra degli indirizzi di un browser, mostrano la form di accesso del router che si trova sul posto, ed io capisco che su quel sito la connessione è OK (ed infatti prima di creare questa app, era questo il metodo che veniva usato per sapere se quel sito era connesso a internet o se c'era un problema che ne impedisse la connessione).
Ovviamente se qualcuno mi suggerisce un metodo migliore per ottenere cio che voglio, ben venga.

Gli IP sono reali, per cui chi vuole aiutarmi puo testarli.

B4X:
Sub Globals
  
    Dim Indir_IP_Pubblico(4) As String
  
End Sub

Sub Activity_Create(FirstTime As Boolean)
  
    Indir_IP_Pubblico(0) = "http://185.104.124.29" '  Qui c'è un router "Digicom"
    Indir_IP_Pubblico(1) = "https://195.60.191.158" ' qui ce un router "FritzBox"
    Indir_IP_Pubblico(2) = "https://195.60.191.192" ' qui c'è un Router "FritzBox"
    Indir_IP_Pubblico(3) = "http://195.60.191.193:8080" ' Qui c'è un router "dd-wrt.com"
  
    Activity.LoadLayout("Layout")

End Sub

Sub Button1_Click
  
    'Testa i 4 IP pubblici (risponde OK solo il primo)
    Dim j As HttpJob
    j.Initialize("", Me)
    j.GetRequest.Timeout = 2000
  
    For i = 0 To 3
        j.Download(Indir_IP_Pubblico(i))
        Wait For (j) JobDone(j As HttpJob)
        If j.Success Then
            Log("IP pubblico raggiungibile")
        Else
            Log("IP pubblico NON raggiungibile")
            Log(j.ErrorMessage)
        End If
    Next
    j.Release

  
End Sub
 

Sabotto

Well-Known Member
Licensed User
No col ping non funziona. O meglio funziona con indirizzi di LAN (almeno dalle mie prove)
Anche Erel suggeriva il metodo con il Job e HttpUtils2OK.
Solo che evidentemente ci vuole un qualcos'altro (che io non so) per accedere al protocollo HTTPS e agli Ip con porta.
Ho anche messo nel manifest la riga
B4X:
SetApplicationAttribute(android:usesCleartextTraffic, "true")
come mi suggerì .udg , ..credo.
Io penso si possa fare, visto che, ripeto, digitando da browser quegli indirizzi, si riceve una "risposta"
Aspettiamo quaclhe esperto altrimenti provo col forum "international"
 

NikB4x

Member
Licensed User
Longtime User
No col ping non funziona. O meglio funziona con indirizzi di LAN (almeno dalle mie prove)
Anche Erel suggeriva il metodo con il Job e HttpUtils2OK.
Solo che evidentemente ci vuole un qualcos'altro (che io non so) per accedere al protocollo HTTPS e agli Ip con porta.
Ho anche messo nel manifest la riga
B4X:
SetApplicationAttribute(android:usesCleartextTraffic, "true")
come mi suggerì .udg , ..credo.
Io penso si possa fare, visto che, ripeto, digitando da browser quegli indirizzi, si riceve una "risposta"
Aspettiamo quaclhe esperto altrimenti provo col forum "international"
Ciao,
credo dipenda dal fatto che gli ip in questione hanno il protocollo ssl attivato ma con un certificato autoprodotto per cui la procedura httputils2ok ti restituisce un errore e non la pagina corretta.
Puoi fare la controprova interrogando un sito con un certificato valido che non dovrebbe darti problemi
Mi ricordo che Erel aveva pubblicato una versione in formato sorgente di HttpUtils2OK nel quale era possibile settare l'accettazione anche di certificati autoprodotti.
 

Sabotto

Well-Known Member
Licensed User
Scusami Stardust non ho capito. Sei riuscito a ottenere risposta col codice che ho postato io?
Che vuol dire " ho dovuto accettare i certificati perchè non validati."? Hai modificato qualche linea di codice?
Puoi farmi capire, magari con esempio?
 

Star-Dust

Expert
Licensed User
Longtime User
Scusami Stardust non ho capito. Sei riuscito a ottenere risposta col codice che ho postato io?
Che vuol dire " ho dovuto accettare i certificati perchè non validati."? Hai modificato qualche linea di codice?
Puoi farmi capire, magari con esempio?
Si. Nicola già ti ha spiegato la questione dei certificati. Li hai prodotti tu e non sono registrati, quindi non validi.

L'ultimo IP è quello con Password (Credo sicurezza Digest) e da errore perchè mancano le credenziali di accesso.

1618515762342.png
 
Last edited:

Sabotto

Well-Known Member
Licensed User
Io non ho prodotto proprio nulla... I router sono stati installati dal fornitore di internet.
Comunque sia, non ho capito che cosa devo toccare per far funzionare il codice. ne capisco molto poco di Https SSL,ecc
Se poteste essere più terra terra...☹
 

Star-Dust

Expert
Licensed User
Longtime User
L'ultimo indirizzo 8080, ha la sicurezza Digest (forse è la pagina di accesso al menu).

Comunque ecco l'esempio terra terra.
 

Attachments

  • Sabotto.zip
    9.3 KB · Views: 261

NikB4x

Member
Licensed User
Longtime User
Io non ho prodotto proprio nulla... I router sono stati installati dal fornitore di internet.
Comunque sia, non ho capito che cosa devo toccare per far funzionare il codice. ne capisco molto poco di Https SSL,ecc
Se poteste essere più terra terra...☹
Qui trovi un pò di spiegazioni:

 

NikB4x

Member
Licensed User
Longtime User
Tutti i router utilizzano certificati SSL "autoprodotti", ovvero non certicati da nessuna authority riconosciuta, per ovvi motivi di costo (il certificato va rinnovato periodicamente ed è a pagamento se non si utilizzano authority tipo let's encrypt che consentono di avere certificati gratuiti ma solitamente per pochi mesi).
I router più costosi consentono di inserire un certicato regolarmente registrato.
In generale l'indirizzo è (e sarà sempre più) quello di consentire solo connessioni criptate (SSL) per qualunque servizio internet per cui il protocollo http andrà a sparire e sarà sostituito da https e quindi i certificati dovranno essere regolarmente validi. Iphone se non mi sbaglio non consente di accedere a connessioni che utilizzano certificati autoprodotti già ora. Per adesso Android lo consente ancora ma non credo per molto....
La cosa migliore, secondo me, se devi testare una specifica connessione è quella di metterci dietro un servizio che risponde con protocollo ssl e certificato valido sempre che non sia antieconomico per quello che ti serve
 

Sabotto

Well-Known Member
Licensed User
Ma scusa Star Dust, il codice tuo è lo stesso mio (a meno di mie distrazioni). Dove sta la parte che "accetta i certificati"?
E comunque a me non funzionano nessuno dei 4 !!!:oops::oops::oops:


Ti allego il mio. Noterai che è identico al tuo, ho solo aggiunto nel log indirizzo 1, indirizzo 2 ecc

Ho anche tolto quella riga del manifest per renderlo identico al tuo

edit: forse come dice Nicola dipende dal telefono? Io mio è un Huawey P20 Pro
 

Attachments

  • test IP.zip
    9.4 KB · Views: 216
Last edited:

Sabotto

Well-Known Member
Licensed User
Se uso questo sito per effettuare il ping a questo tuo indirizzo:
195.60.191.158
la risposta viene ricevuta regolarmente.

P.S. Stessa cosa per:
195.60.191.192
195.60.191.193:8080

L'unico che non risponde è il primo:
185.104.124.29
Si LucaMs, ma a me serve una cosa che funzioni con B4X non con un sito a parte.
Come ho spiegato posso benissimo digitare quegli indirizzi in un browser ed ottengo cio che voglio, ma io voglio fare una routine automatica col B4A.
Insomma deve funzionare col codice B4A
 

LucaMs

Expert
Licensed User
Longtime User
Si LucaMs, ma a me serve una cosa che funzioni con B4X non con un sito a parte.
Come ho spiegato posso benissimo digitare quegli indirizzi in un browser ed ottengo cio che voglio, ma io voglio fare una routine automatica col B4A.
Insomma deve funzionare col codice B4A
Intendevo rispondere a questo:
No col ping non funziona
Se funziona tramite quel sito, funziona anche tramite un'app (tua). Tutto sta ad implementare bene il ping.
Il problema, però, è che non funzionerà sempre, ovvero con qualunque indirizzo, perché dipende dalle impostazioni del router interrogato; infatti, col primo indirizzo non funziona.

Per fare un download (okhttpjob)... devi sapere cosa "scaricare"!
 
Last edited:

NikB4x

Member
Licensed User
Longtime User
Questo disabilita il check dei certificati autoprodotti utilizzando il sorgente e non la libreria okhttp, funziona sui primi 3 però non funziona sul dd-wrt che probabilmente come dice Startdust ha la sicurezza Digest e servono le credenziali.
 

Attachments

  • test IP.zip
    13.2 KB · Views: 195

Star-Dust

Expert
Licensed User
Longtime User
Ma scusa Star Dust, il codice tuo è lo stesso mio (a meno di mie distrazioni). Dove sta la parte che "accetta i certificati"?
E comunque a me non funzionano nessuno dei 4 !!!:oops::oops::oops:


Ti allego il mio. Noterai che è identico al tuo, ho solo aggiunto nel log indirizzo 1, indirizzo 2 ecc

Ho anche tolto quella riga del manifest per renderlo identico al tuo

edit: forse come dice Nicola dipende dal telefono? Io mio è un Huawey P20 Pro
È meno male che ti ho mandato l'immagine dove vedi che si collega. Hai provato il mio codice?


Comunque non c'entra ne il manifest ne il codice. La differenza sta nella configurazione ambiente di compilazione, ovvero dove metti il packagename. Nei simboli condizionanti inserisci HU2_ACCEPTALL

Cosi scrive Erel
Starting from v2.90 it is very simple to initialize the internal http client with the 'accept all' option.
The accept all option means that certificates will not be validated.
It is done by adding the following conditional symbol (Ctrl + B):
HU2_ACCEPTALL

There is another configurable conditional symbol:
HU2_PUBLIC - makes the http client variable (hc) a public variable. This can be used in cases where you want to customize the internal behavior. It is more relevant to B4J and B4A.

Cosi accetta tutti i certificati
 
Last edited:
Top