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

Sabotto

Well-Known Member
Licensed User
Buogiorno
È meno male che ti ho mandato l'immagine dove vedi che si collega. Hai provato il mio codice?
Si. Non intendevo che non ti credessi, ho visto lo screenshot. Non capendo le differenze col mio (potevi dirlo subito che avevi modificato solo la configurazione di ambiente, mi hai fatto impazzire... ?) ho fatto confusione.
Ora l'ho rilanciato (il tuo) e risponde OK al secondo e al terzo mentre il primo e il quarto no. Comunque non sapevo dell'esistenza di questa opzione.

stardust.png
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.
Anche con il tuo esempio Nicola, ricevo le stesse risposte (2 e 3 OK e 1 e 4 NON OK)
Nicola.jpeg

Luca, con il tuo esempio basato sul PING invece ricevo l'OK sui primi 3 (non sugli ultimi 3 come risuktava a te). Inoltre ci mette un pochino piu di tempo

edit: Ho provato a togliere la porta 8080 dall'ultimo IP e ora il ping va anche su quella.
Faccio delle prove su altri IP e se va bene... uso questo sistema, che ripeto, mi serve solo a sapere se quel router è connesso.

lucams.png
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Buogiorno

Si. Non intendevo che non ti credessi, ho visto lo screenshot. Non capendo le differenze col mio (potevi dirlo subito che avevi modificato solo la configurazione di ambiente, mi hai fatto impazzire... ?) ho fatto confusione.
Ora l'ho rilanciato (il tuo) e risponde OK al secondo e al terzo mentre il primo e il quarto no. Comunque non sapevo dell'esistenza di questa opzione.

View attachment 111757

Anche con il tuo esempio Nicola, ricevo le stesse risposte (2 e 3 OK e 1 e 4 NON OK)
View attachment 111758


Luca, con il tuo esempio basato sul PING invece ricevo l'OK sui primi 3 (non sugli ultimi 3 come risuktava a te). Inoltre ci mette un pochino piu di tempo

View attachment 111759
Se te lo dicevo subito dove stava il divertimento?

Il quarto non risponde Ok perché bisogna avere le credenziali, è una pagina di accesso. Il primo a me dava Ok. Probabilmente tu stai chiamando da quello stesso indirizzo e quindi non ti può rispondere
 

NikB4x

Member
Licensed User
Longtime User
Strano.. a me invece funzionava su tutti tranne l'ultimo.
Comunque, se puoi lasciare il ping attivo sul router, è sicuramente meglio utilizzare quello come ha proposto Luca anche se più lento perchè funziona sempre.
La porta chiaramente quando usi il ping non va messa, il ping utilizza il protocollo ICMP che è indipendente dalle porte.
Ciao
 

Sabotto

Well-Known Member
Licensed User
Uhmmm no. Il PING di LUcaMS da dei falsi positivi...(in tema di pandemia....).
perche da l'ok se la stringbuilder è valorizzata
Ma quest'ultima si valorizza anche con PING non riusciti...
Se inserisco indirizzi a caso restituisce sempre OK

Devo abbandonare per un po. vi leggo al ritorno eventualmente
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
prova una variante del codice...per rimanere in tema pandemia
 
Last edited:

NikB4x

Member
Licensed User
Longtime User
Prova così, è un pò "artigianale" ma dovrebbe funzionare
 

Attachments

  • test IP.zip
    9.7 KB · Views: 202

Sabotto

Well-Known Member
Licensed User
Probabile; infatti il codice al link che ti avevo indicato nel post #2 si occupa anche di questo.
LucaMs, lo volevo provare quel codice, ma c'è una variabile "s" che non è dichiarata da nessuna parte, ed infatti l'utente Celso gli chiede cos'è nel post #51.
B4X:
Sub TestServer(server As String) As Boolean
    Dim p As Phone
    Dim sb As StringBuilder
    sb.Initialize
    p.Shell("ping -c 1 " & server,Null,sb,Null)
    Log(sb)
    If sb.Length = 0 Then
        Return False
    Else
        'QUI c'è sta "s" che non si capisce cosa sia e va in errore
        If (s.Mid(sb.ToString,(s.InStr(sb.ToString,"received,")+11),(s.InStr(sb.ToString,"%"))-(s.InStr(sb.ToString,"received,")+10)))="0" Then
            Return True
        Else
            Return False
        End If
    End If
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
LucaMs, lo volevo provare quel codice, ma c'è una variabile "s" che non è dichiarata da nessuna parte, ed infatti l'utente Celso gli chiede cos'è nel post #51.
B4X:
Sub TestServer(server As String) As Boolean
    Dim p As Phone
    Dim sb As StringBuilder
    sb.Initialize
    p.Shell("ping -c 1 " & server,Null,sb,Null)
    Log(sb)
    If sb.Length = 0 Then
        Return False
    Else
        'QUI c'è sta "s" che non si capisce cosa sia e va in errore
        If (s.Mid(sb.ToString,(s.InStr(sb.ToString,"received,")+11),(s.InStr(sb.ToString,"%"))-(s.InStr(sb.ToString,"received,")+10)))="0" Then
            Return True
        Else
            Return False
        End If
    End If
End Sub
Non ho provato ma suppongo sia il tentativo (sbagliato) di scomporre quella "sb", che credo sia la risposta ricevuta-
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
. one moment please :)...
Prova così:

B4X:
Sub TestServer(server As String) As Boolean
    Dim Result As Boolean = True
   
    Dim p As Phone
    Dim sb As StringBuilder
    sb.Initialize
    p.Shell("ping -c 1 " & server,Null,sb,Null)
    Log(sb)
    If sb.Length = 0 Then
        Result = False
    Else
        'QUI c'è sta "s" che non si capisce cosa sia e va in errore
        Dim s As String = sb.ToString
        Dim IndexOfReceived As Int = s.IndexOf("received,")
        Dim IndexOfPacketLoss As Int = s.IndexOf("packet loss,")
        Dim Percentage As String
        Percentage = s.SubString2((IndexOfReceived + 9), IndexOfPacketLoss - 1).Trim
        Result = (Percentage = "0%")
    End If
    Return Result
End Sub
 
Last edited:

Sabotto

Well-Known Member
Licensed User
Ho aggiunto altri IP (reali). Purtroppo sia col codice di LucaMs che con quello di Nicola molti di essi danno risposta negativa.
Riallego il progettino con i nuovi IP aggiunti e contenente le due routine (suggeritemi da Nicola e LucaMs)
Se avete voglia lo guardate. Intanto grazie a tutti e tre (Star Dust è il terzo) per l'assistenza.
Io non ci capisco molto come detto dei protocolli ecc e pensavo che siccome tutti questi IP immessi in un browser "rispondono" fosse piu semplice fare una csa analoga da codice.
 

Attachments

  • Test IP LucaMs_Nicola.zip
    10.1 KB · Views: 152

NikB4x

Member
Licensed User
Longtime User
Ciao,
guarda che ho provato sia il mio codice che quello di Luca con gli IP che hai indicato e funzionano entrambi! Ovvero, se la porta risponde al ping le due routine funzionano perfettamente. Se ti dicono che il server è down, significa che non risponde al ping NON che non ci sia qualche porta http o https aperta! Infatti gli ip che non rispondono utilizzando la app, non rispondono neanche al ping dato da PC.
Forse stai facendo un pò di confusione, come ti avevo già detto in uno dei post precedenti, per far si che il ping sia rilevante per controllare se il router è UP è che il router sia abilitato a rispondere al ping. Alcuni router disabilitano la risposta al ping dall'esterno e devono essere settati per riabilitarlo. In alcuni casi addirittura il router potrebbe essere a sua volta "nattato" dal provider e se il provider ha disabilitato la risposta al ping sul router principale non ci puoi fare nulla.
Spero di averti chiarito un pò le idee.
 

Star-Dust

Expert
Licensed User
Longtime User
Ho aggiunto altri IP (reali). Purtroppo sia col codice di LucaMs che con quello di Nicola molti di essi danno risposta negativa.
Riallego il progettino con i nuovi IP aggiunti e contenente le due routine (suggeritemi da Nicola e LucaMs)
Se avete voglia lo guardate. Intanto grazie a tutti e tre (Star Dust è il terzo) per l'assistenza.
Io non ci capisco molto come detto dei protocolli ecc e pensavo che siccome tutti questi IP immessi in un browser "rispondono" fosse piu semplice fare una csa analoga da codice.
A me funzionano quindi non saprei quale problema stai riscontrando
 

Sabotto

Well-Known Member
Licensed User
Ciao,
guarda che ho provato sia il mio codice che quello di Luca con gli IP che hai indicato e funzionano entrambi! Ovvero, se la porta risponde al ping le due routine funzionano perfettamente. Se ti dicono che il server è down, significa che non risponde al ping NON che non ci sia qualche porta http o https aperta! Infatti gli ip che non rispondono utilizzando la app, non rispondono neanche al ping dato da PC.
Forse stai facendo un pò di confusione, come ti avevo già detto in uno dei post precedenti, per far si che il ping sia rilevante per controllare se il router è UP è che il router sia abilitato a rispondere al ping. Alcuni router disabilitano la risposta al ping dall'esterno e devono essere settati per riabilitarlo. In alcuni casi addirittura il router potrebbe essere a sua volta "nattato" dal provider e se il provider ha disabilitato la risposta al ping sul router principale non ci puoi fare nulla.
Spero di averti chiarito un pò le idee.

Nicola, sei stato chiarissimo (ma anche pima...) . Ho capito che dipende dal settaggio del router la risposta del ping, ma come ho gia spiegato, io su quei router non metto mano, non sono miei nè gestiti da me, ma dalla società che fornisce le connessioni ai vari siti (si tratta di impianti irrigui).
Orbene ho necessità spesso di controllare se in un certo momento su quel sito ci sia connessione. Per fare cio usavo/usavamo (io o chi per me) il sistema di scrivere l'IP nel browser (con http://xxx.xxx.xxx.xx"o https, o con aggiunta della porta ove necessario, e vedere se appariva qualcosa (di solito la maschera del login del router): se appariva, per me/noi la connessione era OK.
Questo sistema, spartano, brutto, scomodo, quello che vuoi era, (anzi è) però efficace per ciò che serve a noi.
Il mio intento era quindi creare un qualcosa da app, che però mi desse gli stessi esiti della prova brutta e cafona sopradescritta.
Resta il fatto che purtroppo, al momento, per altri problemi, nonostante il vostro prezioso aiuto ed impegno, non sono riuscito ad ottenere lo stesso risultato (tranne star dust che se ho ben capito sostiene che a lui rispondono tutti..)

p.s. Proprio per queste problematiche avevo tentato inizialmente la strada della libreria HTTP con il metodo Download.
Intanto vado a controllare quest'altra prova di LucaMS
 
Top