Page 1 sur 2

Test Internet

Publié : dim. 17/mars/2019 16:29
par SPH
Salut la team,

je viens de m'apercevoir que le code ci dessous n'indique pas que l'on est connecté sur internet (or, c'est ce que je cherche) :

Code : Tout sélectionner

If InitNetwork()
  email=1
Else
  email=0
EndIf

If email=0
  MessageRequester("Erreur","Vous n'etes pas connecté à internet")
  End
EndIf
Avez-vous une routine me permettant de le savoir ?

Thx 8)

Re: Test Internet

Publié : dim. 17/mars/2019 16:53
par Ar-S
Tu essayes simplement de télécharger quelque chose.. si ça marche c'est ok sinon.. bah c'est pas ok.

J'ai une page qui affiche son IP distant. Elle ne contient que ip=*xxxxxxxx*
Dans cette exemple, je la telech en mémoire et je vérifie si le mot IP est présent.

Code : Tout sélectionner

InitNetwork()
*Buffer = ReceiveHTTPMemory("http://arsworld.free.fr/ip.php")
  If *Buffer
    Taille = MemorySize(*Buffer)
    TEST$ = PeekS(*Buffer, Taille, #PB_UTF8|#PB_ByteLength)
    FreeMemory(*Buffer)
    If FindString(TEST$,"ip")
      Debug "Connexion OK"
    EndIf
   
  Else
    Debug "Le téléchargement a échoué"
  EndIf
  
y'a peut être plus simple mais j'ai pas envie de couper mon net pour tester.

Re: Test Internet

Publié : dim. 17/mars/2019 16:54
par SPH
Une question plus pertinente et qui m'aidera plus :
Peut on etre connecté a internet et avoir un echec de :

Code : Tout sélectionner

InitNetwork()
:?: 8O

Re: Test Internet

Publié : dim. 17/mars/2019 17:03
par Marc56
Je penses que cette fonction ne sert qu'à charger la lib des fonctions réseau (comme usePNG etc)
Elle ne fait aucun test réseau.
:)

Re: Test Internet

Publié : dim. 17/mars/2019 17:11
par cage
Je me demande si elle ne fait pas un test de la pile réseau pour savoir si le réseau est installé ?

Dans le cas contraire, pas de réseau disponible.

Ce qui peut arriver en cas de "Safe Boot" sans réseau par exemple.

Ou on a désinstallé les drivers réseaux.

Re: Test Internet

Publié : dim. 17/mars/2019 17:18
par Marc56
Peut-être pour la pile, mais pour la connexion, je viens de tester: en désactivant la carte InitNetwork() retourne toujours une valeur autre que zéro, donc il ne teste pas la connexion.

:wink:

Re: Test Internet

Publié : dim. 17/mars/2019 17:27
par cage
Pas de test de la connexion, ça c'est sur.

Si je débranche mon câble RJ45, InitNetwork() ne bronche pas.

Je pense qu'il faut tester un élément qui soit en dehors de chez soi ou de l'entreprise.

Cet élément doit être le plus stable possible (on 24/24)

Re: Test Internet

Publié : dim. 17/mars/2019 17:45
par Marc56
La nouvelle fonction HTTPRequest() (PB >5.70) est ce qui permet la réponse la plus rapide.

Effectivement, interroger un site qui a peu de chance d'être down.

Code : Tout sélectionner

InitNetwork()

HttpRequest = HTTPRequest(#PB_HTTP_Get, "https://www.google.com")

If HttpRequest
    Debug "Connexion Internet OK :-)"
    FinishHTTP(HTTPRequest)
Else
    Debug "Connexion Internet KO :-("
EndIf
À une autre époque on aurait utilisé un Ping, mais de plus en plus de sites bloquent ICMP

:wink:

Re: Test Internet

Publié : dim. 17/mars/2019 18:40
par Christophe
Une autre methode encore plus courte PB < 5.70

Code : Tout sélectionner

If InternetGetConnectedState_(0,0) = #True
  Debug "Connecté"
Else
  Debug "Non connecté"
EndIf

Re: Test Internet

Publié : dim. 17/mars/2019 19:09
par cage
Effectivement ce serait plus rapide, mais comme dit Microsoft
A return value of TRUE from InternetGetConnectedState indicates that at least one connection to the Internet is available. It does not guarantee that a connection to a specific host can be established.
Voir: ici
Voici ce a quoi j'arrive après réflexion sur le sujet
La commande ipconfig /all retourne suffisamment d'informations que l'on peut traiter.
Si au moins une connexion est active, on doit avoir au minimum
une adresse IP DHCP (si non désactivé ==> adresse IP fixe)
une adresse IP DNS (c'est le minimum pour communiquer avec le monde)
La plupart du temps, DHCP et DNS sont donnés par l'entreprise ou son routeur a la maison.
On peut donc les tester

Code : Tout sélectionner

EnableExplicit

Define a$ = Chr(34)
Define param$ = "/c ipconfig.exe /all | findstr /i /c:"+a$+"serveur"+a$+" /c:"+a$+"server"+a$+" 2>&1|clip"

Define rc = RunProgram("cmd.exe",param$,#Null$,#PB_Program_Wait|#PB_Program_Hide)
If rc
  Define entry$ = GetClipboardText() : ClearClipboard()  : Debug entry$
  Define count = CountString(entry$, #CRLF$)             : Debug "count="+count
  If count > 0
    Define n, line$, DNS$, DHCP$
    For n = 1 To count
      line$ = StringField(entry$, n, #CRLF$)     ;: Debug Trim(line$)
      If FindString(line$,"DNS",1,#PB_String_NoCase)
        DNS$  = Trim(StringField(line$, 2, ":"))  : Debug "DNS="+DNS$
      EndIf
      If FindString(line$,"DHCP",1,#PB_String_NoCase)
        DHCP$ = Trim(StringField(line$, 2, ":"))  : Debug "DHCP="+DHCP$
      EndIf
    Next
  EndIf
EndIf
Reste a implémenter le test que l'on veut.

Re: Test Internet

Publié : dim. 17/mars/2019 19:28
par SPH
Christophe a écrit :Une autre methode encore plus courte PB < 5.70

Code : Tout sélectionner

If InternetGetConnectedState_(0,0) = #True
  Debug "Connecté"
Else
  Debug "Non connecté"
EndIf
Je suis en 5.11 pour mon jeu 8)
Mais merci pour l'info :idea:

Re: Test Internet

Publié : dim. 17/mars/2019 19:47
par Christophe
Je suis en 5.11 pour mon jeu 8)
Mais merci pour l'info :idea:
Comme c'est une API ça fonctionnera avec ton 5.11, mais comme le dit cage cela testera si ta connexion est active mais pas si ta connexion à une adresse spécifique puisse être établie.

Re: Test Internet

Publié : dim. 17/mars/2019 21:28
par cage
Autre piste

Code : Tout sélectionner

InitNetwork()
  If ExamineIPAddresses()
    Repeat
      IP = NextIPAddress()
      If IP ; <--- au moins une interface est paramétrée et possède une adresse IP
        Debug "IPv4: " + IPString(IP) 
      EndIf
    Until IP = 0
  EndIf
End
Exemple de la documentation PB
On vérifie qu'au moins une interface est paramétrée et possède une adresse IP

Re: Test Internet

Publié : dim. 17/mars/2019 23:18
par Ar-S
@cage. Mais si on est en reseau (sur un routeur), on peut très bien avoir de l'ip locale.
Ou même s'il ping 127.0.0.1 par exemple, ça sera valide non ?

Re: Test Internet

Publié : dim. 17/mars/2019 23:59
par cage
@cage. Mais si on est en reseau (sur un routeur), on peut très bien avoir de l'ip locale.
Exact.
C'est mon cas comme beaucoup je pense (surtout pour du jeux)
J'ai une adresse en 192.168.0.x qui m'est donnée par ma Freebox en mode routeur.
Je n'obtiens cette adresse que si ma Box est sous tension et que la liaison FO dans mon cas a passée toutes les étapes.
Je suis donc bien connecté a 'Internet'.
Si ma box reste dans un état intermédiaire, pas d'IP et pas de connexion internet.
Par contre, l'interface du PC est Up (RJ45)

L'adresse IP 127.0.0.1 est l'adresse de l'interface Loopback et elle répond toujours au Ping même si la pile réseau est HS.
Donc le fait que cette adresse IP réponde au Ping ne signifie pas grand chose.

Qu'on soit a la maison ou en entreprise, il faudrait s'assurer qu'au moins l'adresse IP externe réponde au Ping
Il existe plusieurs URL qui permettent de connaitre son adresse IP externe, mais en entreprise, cela peut être filtré.
Dans mon ancienne entreprise, Renault pour ne pas la citer, je connaissais cette adresse car elle était publique.
Je connaissais aussi les DNS (internes) ce qui permettait de savoir que la partie LAN/WAN fonctionnait.
Pour internet, une connexion Web indiquait si s'était bon, sauf que si les Proxies dysfonctionnaient, pas d'internet.
Bref, la question posée par SPH est plus complexe qu'il n'y parait.
Cela demande un peu de réflexion, mais là il est tard.
Bonne nuit a tous.