Adresse IP local et public et ++ si affinité

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Adresse IP local et public et ++ si affinité

Message par falsam »

Ça fait un peu bricolage, mais je pense que la plupart des logiciels affichant l'adresse ip public de votre ordinateur font appel à cette technique. Le principe consiste à soumettre à une liste de serveur web une requête en php retournant votre adresse ip public ainsi que des informations sur votre fournisseur d’accès internet et l'utilisation d'un proxy (ou pas).

C'est ce que vous propose l'include GetIp.pbi auquel j'ai ajouté une procédure pour obtenir aussi l'adresse IP local de votre ordinateur.

Pour le moment j'interroge qu'un seul site web pour obtenir l'adresse IP public. je ne manquerais pas de poster une suite à ce code.

L'include GetIp.pbi

Code : Tout sélectionner

;GetIp.pbi  V 1.10
;
;Create : 27 Aout 2012
;Update : 19 Mars 2014
;
;OS : Window, Linux, OSx
;PB 4.61 -> 5.22
;
;
;Contributors
; Falsam
;
; Licence : Use As You Like
;

Declare InitISP()        ;Lance une requete sur http://www.monip.org
Declare GetLanIp()       ;Retourne l'adresse IP de l'ordinateur
Declare GetWanIp()       ;Retourne l'adresse internet public
Declare.s GetISPInfo()   ;Retourne le fournisseur d'acces internet
Declare.s GetProxyInfo() ;Utilisation d'un proxy oui ou non

Global Buffer.s

;
;Lance une requete sur le site monip.org
Procedure InitISP()
  Protected File.l
  
  ReceiveHTTPFile("http://www.monip.org", "info.net")
  
  File=ReadFile(#PB_Any, "info.net")
  
  If File
    While Eof(File)=0
      Buffer=ReadString(File)
      If FindString(Buffer, "IP :")
        Buffer=Trim(Mid(Buffer, 40))
      EndIf
    Wend
    CloseFile(File)
  EndIf
  DeleteFile("info.net")
EndProcedure

;
;Retourne l'adresse IP de l'ordinateur
Procedure GetLanIp()
  ExamineIPAddresses()
  ProcedureReturn NextIPAddress()
EndProcedure


;
;Retourne l'adresse internet public : Celui de votre Box ou modem cable
Procedure GetWanIp()
  Protected Ip.s, IP1.i, IP2.i, IP3.i,IP4.i
  
  IP = StringField(Trim(Mid(Buffer, 1, 15)), 1, "<")
  
  IP1 = Val(StringField(IP, 1, "."))
  IP2 = Val(StringField(IP, 2, "."))
  IP3 = Val(StringField(IP, 3, "."))
  IP4 = Val(StringField(IP, 4, "."))
 
  ProcedureReturn MakeIPAddress(IP1, IP2, IP3, IP4)
EndProcedure


;
;Retourne le fournisseur d'acces internet (Internet Service Provider)
Procedure.s GetISPInfo()
  Protected PosStart.i, PosEnd.i
  
  PosStart = FindString(Buffer, "<i>")
  PosEnd = FindString(Buffer, "</i>")
  
  ProcedureReturn Trim(Mid(Buffer, PosStart+3, PosEnd-PosStart-3))
EndProcedure

;Proxy ou pas 
Procedure.s GetProxyInfo()
  Protected PosStart.i, PosEnd.i
  
  PosStart = FindString(Buffer, "<br><br>")
  PosEnd = FindString(Buffer, "</font></html>")
  
  ProcedureReturn Trim(Mid(Buffer, PosStart+8, PosEnd-PosStart-10))
EndProcedure
Code de test.

Code : Tout sélectionner

;Get Ip -Test

IncludeFile "getip.pbi"

If InitNetwork()
  InitISP()

  Debug "Lan IP : " + IPString(GetLanIp()) + " Computer : "+ Hostname()

  Debug ""

  Debug "WAN IP : " + IPString(GetWanIp()) + " FAI : " + GetISPInfo()
    
  Debug ""
EndIf
Attention : Cet include n'est pas compatible avec la version 4.51 de purebasic.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%