Page 1 sur 1

Obtenir l'adresse IP de votre routeur

Publié : mer. 20/avr./2016 12:02
par falsam
Le sujet a déjà été évoqué avec différentes solutions de parsing classiques d'une page web contenant l'adresse ip coincée entres deux balises.

Le site https://www.ipify.org propose une API qui retourne un fichier JSON contenant l'adresse IP de votre routeur.

La procédure que je vous présente utilise deux fonctionnalité apparus depuis la version 5.31 de Purebasic : ReceiveHTTPMemory() et ParseJSON()

Le code de base pour interroger l'API est

Code : Tout sélectionner

InitNetwork()

*Buffer = ReceiveHTTPMemory("https://api.ipify.org?format=json")
If *Buffer    
  ParseJSON(0, PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8))
  FreeMemory(*Buffer)
  Debug GetJSONString(GetJSONMember(JSONValue(0), "ip"))
EndIf
A partir de ce code, vous trouverez une procédure qui permet d'obtenir la valeur numérique de l'adresse IP.

Code : Tout sélectionner

Procedure GetWanIp()
  Protected IP.s, Dim IP(4), n
  Protected *Buffer = ReceiveHTTPMemory("https://api.ipify.org?format=json")
  
  If *Buffer    
    ParseJSON(0, PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8))
    FreeMemory(*Buffer)
    IP = GetJSONString(GetJSONMember(JSONValue(0), "ip"))
    
    For n = 1 To CountString(IP, ".") + 1
      IP(n-1) = Val(StringField(IP, n, "."))
    Next
    
    ProcedureReturn MakeIPAddress(IP(0), IP(1), IP(2), IP(3))
  Else
    ProcedureReturn #False
  EndIf
EndProcedure
Vous allez me dire "Mais hooooo !" Comment fait on pour retrouver notre adresse IP ?"

C'est simple

Code : Tout sélectionner

Debug IPString(GetWanIp())
Pour terminer le code permettant d'utiliser GetWanIp() conjointement avec le gadget IPAddressGadget()

Code : Tout sélectionner

InitNetwork()
If OpenWindow(0, 0, 0, 180, 50, "WAN IP", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  IPAddressGadget(0, 10, 15, 160, 20)
  SetGadgetState(0, GetWanIp())
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: Obtenir l'adresse IP de votre routeur

Publié : mer. 20/avr./2016 12:31
par cage
Merci pour ce partage.

Il manque InitNetwork() dans la procédure GetWanIp() avant le ReceiveHTTPMemory(...)

Personnellement, j'utilise http://monip.outils-rezo.info/text pour trouver mon IP Wan

Pour les petits curieux, http://ipaddress.com et http://www.monip.org

Re: Obtenir l'adresse IP de votre routeur

Publié : mer. 20/avr./2016 12:35
par Marc56
Merci falsam pour cet exemple didactique :wink:

Il faudra vraiment que je me (re)mette un jour à l'utilisation des fonctions de gestion de mémoire directe.
La dernière fois que j'ai utilisé des peek et des pokes, c'était sur mon Vic-20 dans les années 80 :) mais ça fait du bien de dépoussiérer les neurones :P

Re: Obtenir l'adresse IP de votre routeur

Publié : mer. 20/avr./2016 13:53
par Kwai chang caine
Dommage que FRED n'est toujours pas ajouté la gestion des proxy :|
Merci quand même :wink:

Re: Obtenir l'adresse IP de votre routeur

Publié : mer. 20/avr./2016 15:56
par falsam
cage a écrit :Il manque InitNetwork() dans la procédure GetWanIp() avant le ReceiveHTTPMemory(...)
Ooops oui tu as raison. Code corrigé. Merci pour cette observation.
cage a écrit :Personnellement, j'utilise http://monip.outils-rezo.info/text pour trouver mon IP Wan
C'était aussi une autre possibilité d'autant plus que le résultat est sans balise html.

■ Exemple de code avec ton lien

Code : Tout sélectionner

InitNetwork()

*Buffer = ReceiveHTTPMemory("http://monip.outils-rezo.info/text")
If *Buffer    
  Debug PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8)
  FreeMemory(*Buffer)
EndIf
Minimum de code pour un résultat rapide ^^
Kwai chang caine a écrit :Dommage que FRED n'est toujours pas ajouté la gestion des proxy
Litanie selon Kwai chang caine :wink:

Re: Obtenir l'adresse IP de votre routeur

Publié : mer. 20/avr./2016 17:44
par Marc56
KCC a eut (aura peut-être) son .gif après 10 ans de demandes 8)
Sa demande de proxy devrait donc arriver vers 2026 :mrgreen:

Re: Obtenir l'adresse IP de votre routeur

Publié : mer. 20/avr./2016 18:39
par Ar-S

Code : Tout sélectionner

InitNetwork()
*Buffer = ReceiveHTTPMemory("http://monip.outils-rezo.info/text")
If *Buffer   
  Debug PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8)
  FreeMemory(*Buffer)
EndIf
Je prends merci, je ne changerai que l'adresse http, j'ai une page pour ça ^^

Re: Obtenir l'adresse IP de votre routeur

Publié : jeu. 21/avr./2016 8:12
par Kwai chang caine
Marc56 a écrit :KCC a eut (aura peut-être) son .gif après 10 ans de demandes 8)
Sa demande de proxy devrait donc arriver vers 2026 :mrgreen:
Oui surtout que c'est la première fois que je le demande.
Pour les Gifs je ne compte plus.
En attendant, kcc y dit peut être que des conneries, mais Fred finit toujours par y venir, malgré qu'il freine des 4 fers.

Je citerais entre autres, les "projets", les "retours à la ligne"
Reste les gifs et les gosub dans les procédures (J'suis passé à un poil de c. .. de l'avoir. :| )

@Falsam
Litanie, litanie...sur le dico y disent citation longue et ennuyeuse.
J'ai juste fait une remarque comme quoi ton code était inutilisable en entreprise, en une phrase, c'était pas si long 8O
Et quand au côté ennuyeux, excuse moi de faire remarquer un manque d'une des fonctions de PB.
Les proxy sont de plus en plus nombreux, encore un point où PB n'a pas évolué.

Je n'ai jamais utilisé cette librairie à cause de ça, malgré mes nombreux programmes utilisant le réseau (vive les API)
Car lorsque l'on fait un programme, tu expliqueras au client pro, que ça marche que à la maison :lol:

Enfin moi ....c'que j'en dit, je dit ça je dit rien. .. :roll:
J'ai pris l'habitude en plus de 10 ans de ne pas être écouté. ..je me marre juste à mon tour, quant je vois les autres, et parfois les nombreux autres, faire une demande qu'il y a des années que j'ai faîtes, et qu'on s'est bien foutu de ma gueule à l'époque :mrgreen:

Avec l'âge..... j'ai eu maintes fois le loisir de constater, que la vie se charge d'apprendre aux gens "bien pensant", que parfois, même les abrutis ont des bonnes idées :mrgreen:

Re: Obtenir l'adresse IP de votre routeur

Publié : jeu. 21/avr./2016 10:31
par Marc56
Kwai chang caine a écrit : Car lorsque l'on fait un programme, tu expliqueras au client pro, que ça marche que à la maison :lol:
Le client pro est aussi maitre de son proxy, et donc peut faire configurer des exceptions aux programmes autorisés.
:wink:

Re: Obtenir l'adresse IP de votre routeur

Publié : jeu. 21/avr./2016 11:33
par Kwai chang caine
Et non....pas toujours :wink:
Tout dépend de la taille de l'entreprise.
Lorsqu'elle est considerable voir gigantesque, elle a obligatoirement un SI qui est le seul maître du proxy devant dieu :mrgreen:

Toute demande doit être formulée en x exemplaires, et avoir l'approbation de ce dernier.
Autant dire que c'est même pas la peine d'user ton crayon bien souvent.
Et autant dire aussi que faire une exception n'est pas à la mode avec les restrictions de plus en plus importantes dues au nombre croissant (pas au beurre) de malware.

Je me vois bien demander une exception pour tester le code de notre bon FALSAM :mrgreen:

Donc je le répète, un service de la dite entreprise, peut avoir besoin d'accéder à Internet, en avoir l'autorisation, et se voir refuser l'accès du fait que le soft n'a pas renseigné le login et mdp au proxy, nécessaire à toute transaction externe.

La vie n'est pas toujours simple en entreprise. ..crois moi :wink:

Re: Obtenir l'adresse IP de votre routeur

Publié : sam. 28/mai/2016 21:52
par falsam
Randall Degges a le plaisir de vous annoncer que le code PureBasic que j'ai proposé avec l'api api.ipify.org est référencé depuis aujourd'hui son site https://www.ipify.org

Re: Obtenir l'adresse IP de votre routeur

Publié : sam. 28/mai/2016 22:57
par venom

Code : Tout sélectionner

InitNetwork()
*Buffer = ReceiveHTTPMemory("http://monip.outils-rezo.info/text")
If *Buffer   
  Debug PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8)
  FreeMemory(*Buffer)
EndIf
En effet court mais efficace.
Merci du partage.






@++