Problème avec IPAddresses

Sujets variés concernant le développement en PureBasic
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Problème avec IPAddresses

Message par wolfjeremy »

Salut,

J'esseye de recuperer mon ip, le problème c'est que au lieu de me retourner mon ip il me retourne l'ip sur mon reseau local c'est a dire celle du routeur "192.168.x.x".

Pouvez vous me dire comment recuperer la vrai adresse ip utiliser sur le web ?

Merci d'avance pour votre réponse.

P.S.: quelqu'un sait egalement comment recuperer l'adresse physique ? (ou l'adresse mac si vous preferer)
Anonyme

Message par Anonyme »

J'ai une méthode de bricolo du dimanche, mais elle fonctionne :D

tu ouvre un site d'IP ex: WhatismyIP.com , tu charge la page en mémoire et tu extrait ton IP, le problème est que tu dépends d'un site, donc si le site change, ton code ne fonctionnera certainement plus. j'ai plus mon code sous la main, mais une recherche sur le forum te permetera certainement de voir le sujet déjà aborder.

@++
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

lol ok merci, j'aime bien les methode bricolo du dimanche :lol:
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Oui donc j'ai trouver un code sur le forum :


Enumeration
   #String_0
   #String_1
   #String_2
   #String_3
   #String_4
   #String_5
   #String_6
   #Button_0
   #Text_0
   #Text_1
   #Text_2
   #Text_3
   #Text_4
   #Text_5
   #Text_6
   #Button_2
   #icone_actif
   #icone_arret
   #image_0
EndEnumeration

#INTERNET_SERVICE_FTP =1
#INTERNET_OPEN_TYPE_DIRECT =1
#FTP_PORT =21
#FTP_TRANSFER_ASCII =1
#FTP_TRANSFER_BINARY =2


Global Nom_Serveur.s,Nom_Utilisateur.s,Mot_De_Passe.s,Nom_Fichier_Local.s,Nom_Fichier_Distant.s,Frequence.s,Nom_Hote.s
Global freq.l , etat_prog.b ,adresse_ip.s , Memoire_adresse_ip.s



Procedure.s Encrypt(str.s) ; pour le codage du mot de passe ftp dans les prefs
  DefType.l i, C
  DefType.s tmp, erg
  
   For i = 1 To Len (str)
    tmp = Mid (str, i, 1)
    C = Asc (tmp) + 15
     If C > 255
      C = C - 255
     EndIf
    erg = erg + Chr (C)
   Next
  
   ProcedureReturn erg
EndProcedure

Procedure.s Decrypt(str.s)
  DefType.l i, C
  DefType.s tmp, erg
  
   For i = 1 To Len (str)
    tmp = Mid (str, i, 1)
    C = Asc (tmp) - 15
     If C < 0
      C = C + 255
     EndIf
    erg = erg + Chr (C)
   Next
  
   ProcedureReturn erg
EndProcedure

Procedure lecture_preference()
  
   If OpenPreferences ( "dyn_ip.pref" )
    Nom_Hote = ReadPreferenceString ( "Nom_Hote" , "Erreur ! Pas de données ..." )
    Nom_Serveur = ReadPreferenceString ( "Nom_Serveur" , "Erreur ! Pas de données ..." )
    Nom_Utilisateur = ReadPreferenceString ( "Nom_Utilisateur" , "Erreur ! Pas de données ..." )
    tempo.s = ReadPreferenceString ( "Mot_De_Passe" , "Erreur ! Pas de données ..." )
    Mot_De_Passe = Decrypt(tempo)
    Nom_Fichier_Local = ReadPreferenceString ( "Nom_Fichier_Local" , "Erreur ! Pas de données ..." )
    Nom_Fichier_Distant = ReadPreferenceString ( "Nom_Fichier_Distant" , "Erreur ! Pas de données ..." )
    Frequence = ReadPreferenceString ( "Frequence" , "Erreur ! Pas de données ..." )
    freq = Val (Frequence)
     If freq = 0
      freq = 60
      Frequence = "60"
       EndIf
      ClosePreferences ()
   Else
     MessageRequester ( " Erreur" , "Pas de fichier de Configuration : " + Chr (34) + " proto_dyn_ip.pref " + Chr (34) + "" , #MB_OK|#MB_ICONERROR )
   EndIf
  
  
   SetGadgetText ( #String_6 ,Nom_Hote) ; Remplissage des champs de la fenetre
   SetGadgetText ( #String_0 ,Nom_Serveur)
   SetGadgetText ( #String_1 ,Nom_Utilisateur)
   SetGadgetText ( #String_2 ,Mot_De_Passe)
   SetGadgetText ( #String_3 ,Nom_Fichier_Local)
   SetGadgetText ( #String_4 ,Nom_Fichier_Distant)
   SetGadgetText ( #String_5 ,Frequence)
  
EndProcedure

Procedure ecriture_preference()
  
  
  
  
  
   If CreatePreferences ( "dyn_ip.pref" )
     WritePreferenceString ( "Nom_Hote" , GetGadgetText ( #String_6 ))
     WritePreferenceString ( "Nom_Serveur" , GetGadgetText ( #String_0 ))
     WritePreferenceString ( "Nom_Utilisateur" , GetGadgetText ( #String_1 ))
    tempo.s = Encrypt( GetGadgetText ( #String_2 )) ; Encodage du mot de passe
     WritePreferenceString ( "Mot_De_Passe" , tempo.s )
     WritePreferenceString ( "Nom_Fichier_Local" , GetGadgetText ( #String_3 ))
     WritePreferenceString ( "Nom_Fichier_Distant" , GetGadgetText ( #String_4 ))
    entier.l = Val ( GetGadgetText ( #String_5 )) ; Convertion du champ frequence en entier !
     WritePreferenceString ( "Frequence" , Str (entier))
   EndIf
  
    
  
EndProcedure

Procedure.s OpenURL(Url.s, OpenType.b)
  
  isLoop.b=1
  INET_RELOAD.l=$80000000
  hInet.l=0: hURL.l=0: Bytes.l=0
  Buffer.s= Space (2048 )
  
  hInet = InternetOpen_ ( "PB@INET" , OpenType, #Null , #Null , 0)
  hURL = InternetOpenUrl_ (hInet, Url, #Null , 0, INET_RELOAD, 0)
  
   Repeat
    
     Delay (1)
     InternetReadFile_ (hURL, @Buffer, Len (Buffer), @Bytes)
     If Bytes = 0
      isLoop=0
     Else
      res.s = res + Left (Buffer, Bytes)
     EndIf
   Until isLoop=0
   InternetCloseHandle_ (hURL)
   InternetCloseHandle_ (hInet)
   ProcedureReturn res
  
  
  
EndProcedure

Procedure.s Recup_Ip()
  
  URL$ = "http://www.whatismyip.com/" ; Adresse http://www.whatismyip.com/ ou http://www.ipaddressworld.com
  HTML$ = OpenURL(URL$, 1) ; Appel de la procedure OpenURL et enregistrement de la page dans HTML$
  
   ;OpenFile(1,"c:\sauv_page_ip.txt") ; Utile pour la mise au point du filtre de recherche de l'IP
   ;WriteString(HTML$)
   ;CloseFile(1)
  
  debut = FindString (HTML$, "<TITLE>Your ip is" ,1) + 17 ;
  fin = FindString (HTML$, "WhatIsMyIP.com</TITLE>" ,1) ; Filtre pour trouver l'adresse ip dans la page html
  ip$ = Mid (HTML$,debut,(fin - debut)) ; Attention filtre pour http://www.whatismyip.com/
   ; different si un autre site ! !
   ProcedureReturn ip$
EndProcedure

Procedure Creation_Page_Perso(localfile.s,ip.s)
  
  date$ = FormatDate ( "%dd/%mm/%yyyy" , Date ()) ; Creation et mise en forme de la chaine date$
  heure$ = FormatDate ( "%hh:%ii:%ss" , Date ()) ; Creation et mise en forme de la chaine heure$
  
  donnees$ = "Adresse IP de " + Nom_Hote + " est :&nbsp;" + ip + " &nbsp;&nbsp;&nbsp;Mise à jour le : &nbsp " + date$ + " &nbsp;&nbsp; à : &nbsp;&nbsp;" + heure$
  
  HTML$= "<html><head><title> Adresse IP </title></head><body><p>" + donnees$ + "</p></body></html>"
  
   OpenFile (1,localfile)
   WriteString (HTML$)
   CloseFile (1)
  
  
EndProcedure

Procedure.s Envoie_Ftp(Proxy.s,ProxyBypass.s,ServerName.s,UserName.s,Password.s,localfile.s,remotefile.s)
  
   #INTERNET_SERVICE_FTP =1
   #INTERNET_OPEN_TYPE_DIRECT =1
   #FTP_PORT =21
   #FTP_TRANSFER_ASCII =1
   #FTP_TRANSFER_BINARY =2
  
  
  hInternet= InternetOpen_ ( "FTP" , #INTERNET_OPEN_TYPE_DIRECT ,Proxy,ProxyBypass,0)
   If hInternet
    hConnect= InternetConnect_ (hInternet,ServerName, #FTP_PORT ,UserName,Password, #INTERNET_SERVICE_FTP ,0,0)
     If hConnect
       If FtpPutFile_ (hConnect,localfile,remotefile, #FTP_TRANSFER_ASCII ,0)
         ;MessageRequester("","File has been sent",0)
        message.s = " Transfert du fichier OK !"
       Else
         ;MessageRequester("Error", "Failure while sending file...",0)
        message.s = " Erreur, Probleme pendand l'envoie du fichier..."
       EndIf
     Else
       ;MessageRequester("Error", "Couldn't get a connection to the server!",0)
      message.s = " Erreur, Impossible de se connecter au serveur ftp..."
     EndIf
     InternetCloseHandle_ (hInternet)
   Else
     ;MessageRequester("Error", "Internet isn't reachable.",0)
    message.s = " Erreur , Pas de connexion a internet ..."
   EndIf
   ProcedureReturn message
EndProcedure

Procedure mise_a_jour()
  
  adresse_ip = Recup_Ip()
  
  SysTrayIconToolTip(0, "Ip Publique = " + adresse_ip)
   SetWindowTitle (0, "Actif ! freq = " + Str (freq) + " mn" + " Ip Publique = " + adresse_ip)
  
   If adresse_ip <> Memoire_adresse_ip
    Creation_Page_Perso(Nom_Fichier_Local,adresse_ip)
    Envoie_Ftp( "" , "" ,Nom_Serveur,Nom_Utilisateur,Mot_De_Passe,Nom_Fichier_Local,Nom_Fichier_Distant)
    Memoire_adresse_ip = adresse_ip
   EndIf
  
EndProcedure


;-------------------------------------------- Début de Programme --------------------------------



id_icone_actif = LoadImage ( #icone_actif , "icone_actif.ico" ) ; Chargement des icones pour le systray
id_icone_arret = LoadImage ( #icone_arret , "icone_arret.ico" )

 

;------------------------------------------ Creation de la fenetre ----------------------------



If OpenWindow (0, 346, 307, 364, 292, #PB_Window_MinimizeGadget|#PB_Window_SystemMenu , "Dyn_IP" )
  
   AddSysTrayIcon (0, WindowID (),id_icone_arret )
  SysTrayIconToolTip(0, "Dyn_IP" )
  
   If CreatePopupMenu (0)
     MenuItem (1, "Restaurer" )
   EndIf
  
   If CreateGadgetList ( WindowID ())
     StringGadget ( #String_0 , 10, 40, 210, 20, "" )
     StringGadget ( #String_1 , 10, 70, 210, 20, "" )
     StringGadget ( #String_2 , 10, 100, 210, 20, "" , #PB_String_Password ) ;#PB_String_Password
     StringGadget ( #String_3 , 10, 130, 210, 20, "" )
     StringGadget ( #String_4 , 10, 160, 210, 20, "" )
     StringGadget ( #String_5 , 10, 190, 210, 20, "" )
     StringGadget ( #String_6 , 10, 10, 210, 20, "" )
     ButtonGadget ( #Button_0 , 10, 220, 210, 40, "Enregistrer" )
     ButtonGadget ( #Button_2 , 230, 220, 120, 40, "Démarrer" )
     TextGadget ( #Text_0 , 240, 40, 130, 20, "Adresse du serveur ftp" )
     TextGadget ( #Text_1 , 240, 70, 100, 20, "Nom d'utilisateur" )
     TextGadget ( #Text_2 , 240, 100, 80, 20, "Mot de passe" )
     TextGadget ( #Text_3 , 240, 130, 120, 20, "Nom du fichier local" )
     TextGadget ( #Text_4 , 240, 160, 110, 20, "Nom du fichier distant" )
     TextGadget ( #Text_5 , 240, 190, 110, 20, "freq mise à jour (mn)" )
     TextGadget ( #Text_6 , 240, 10, 80, 20, "Nom de l'hote" )
     ImageGadget ( #image_0 ,320,2,32,32,id_icone_arret)
   EndIf
  
   If CreateMenu (1 , WindowID ())
     MenuTitle ( "Menu" )
     MenuItem (2, " Quitter" )
   EndIf
  
  
lecture_preference() ; Remplissage des champs de la fenetre
  
  
  
;- ------------------------------ Boucle de gestion des evenements --------------------------------
   Repeat
    Event = WaitWindowEvent ()
    
     Select Event
       Case #PB_Event_SysTray
         If EventType () = #PB_EventType_RightClick
           DisplayPopupMenu (0, WindowID ())
           If IsIconic_ ( WindowID (0))
             ;cette ligne est utilisée pour l'effet d'agrandissement
             ShowWindow_ ( WindowID (0), #SW_MINIMIZE )
             ;Une tempo est nécessaire sinon ça ne fonctionne pas à tous les coups
             Delay (250)
             ShowWindow_ ( WindowID (0), #SW_RESTORE )
           EndIf
         EndIf
        
       Case #WM_SIZE
         If IsIconic_ ( WindowID (0))
           ShowWindow_ ( WindowID (0), #SW_HIDE )
         EndIf
       
       Case #PB_EventGadget
        
         GadgetID = EventGadgetID ()
        
         If GadgetID = #String_0
           
         ElseIf GadgetID = #String_1
           
         ElseIf GadgetID = #String_2
           
         ElseIf GadgetID = #String_3
           
         ElseIf GadgetID = #String_4
          
         ElseIf GadgetID = #Button_0 ; bouton Enregistrer
          ecriture_preference()
          lecture_preference()
          
         ElseIf GadgetID = #Button_2 ; Bouton démarrer
          
           If GetGadgetText ( #Button_2 )= "Démarrer"
             SetGadgetText ( #Button_2 , "Arrêter" )
             SetWindowTitle (0, "Dyn_IP Actif ! freq = " + Str (freq) + " mn" )
             ChangeSysTrayIcon (0,id_icone_actif)
             ImageGadget ( #image_0 ,320,2,32,32,id_icone_actif)
            lecture_preference()
            mise_a_jour()
            StartTimer(0,freq*60000,@mise_a_jour()) ; Demarrage du Timer sur la procedure mise_a_jour
            
           Else
            EndTimer(0) ; Arret du Timer
             SetGadgetText ( #Button_2 , "Démarrer" )
             SetWindowTitle (0, "Dyn_IP Arrêté !" )
             ChangeSysTrayIcon (0,id_icone_arret)
             ImageGadget ( #image_0 ,320,2,32,32,id_icone_arret)
            
           EndIf
         
         EndIf
       
        
       Case #PB_EventMenu
        
        menu_id = EventMenuID ()
        
         If menu_id = 2
           End
         EndIf
       
     EndSelect
   
   Until Event = #PB_Event_CloseWindow
EndIf

End


J'ai essyer de recuperer l'ip avec juste les procedure qui font appel au site pour l'ip mais bon sa marche pas... tu pourrais pas me faire sa en vitesse ? car je doit t'avouer que je suis perdu... (peut etre parce que c'est le matin et que je dort encore ? lol)

Merci d'avance pour ton aide.
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

si tu veux un truc plus simple : http://flaith.free.fr/php/yourip

voici le code php :

Code : Tout sélectionner

<?php
   if(isset($_SERVER["REMOTE_ADDR"])) { // Si on peut déterminer l'adresse IP
	    $ip_en_cours = $_SERVER["REMOTE_ADDR"];
   } else { // sinon
	    $ip_en_cours = "Non identifiable";
   }
    
   $navigateur = $_SERVER['HTTP_USER_AGENT'];
   $remote_host = gethostbyaddr( $REMOTE_ADDR ); #$_SERVER['REMOTE_HOST'];
   echo "<html>";
   echo "<head>";
   echo "<title>Your IP !!!</title>";
   echo "</head>";
   echo "<body>";
   echo "IP:$ip_en_cours";
   echo "<br>";
   echo "NAV:$navigateur";
   echo "<br>";
   echo "RH:$remote_host";
   echo "<br>";
   echo "</body>";
   echo "</html>";
?>
et tu recup sur la ligne après "IP:" :wink:
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

A oui merci effectivement c'est simple :P
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Ya pas moyen de récupérer les adresses ip en lançant des commandes genre ipconfig et en récupérant le texte de retour ?

Ca serait beaucoup plus simple... :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Bha tu sais la methode de la page php marche tres bien et sa prend que une trentaine de ligne... :) dans PB sa prendrai beaucoup plus de ligne... sauf si on a pas de routeur sa prend que deux lignes.
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

lionel_om a écrit :Ya pas moyen de récupérer les adresses ip en lançant des commandes genre ipconfig et en récupérant le texte de retour ?

Ca serait beaucoup plus simple... :wink:
J'ai une connection automatique par mon modem/routeur, donc l'ipconfig ne me donnera rien du tout (à part mes ip locales) :wink:
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

ma page est plus simple, elle ne donne que l'IP : http://www.gansta93.com/IP.php ça ne fait qu'un echo de REMOTE_ADDR :-D.
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Merci les gars, mais bon je vais créer ma propre page sur mon serveur :wink:
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Mais c'est pas un code PB qu'il voulait ?
Parce que en PHP c'est assez facile, du moins je connaissais déja...

Parce qu'il y a sous doute moyen de savoir savoir en lançant une commande (doit bien y en avoir une), après faut la toruver... :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

Salut
essaye ce petit code defois que sa marche ....
A+
scaraber

Code : Tout sélectionner

InitNetwork()
Declare ip(Listview,nombreipscan)
Declare copie(gadget)

Enumeration
  #Listview_0
  #Button_0
  #Frame3D_0
  #Button_1
EndEnumeration



  If OpenWindow(0, 217, 18, 190, 310,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Ip")
    If CreateGadgetList(WindowID())
      ListViewGadget(#Listview_0, 30, 50, 130, 160)
      ButtonGadget(#Button_0, 10, 240, 70, 40, "Scan")
      Frame3DGadget(#Frame3D_0, 20, 30, 150, 190, "Adresse ip")
      ButtonGadget(#Button_1, 90, 240, 90, 40, " Copier dans le presse   papier", #PB_Button_MultiLine)
    EndIf 
  EndIf



Repeat 

  EventID = WaitWindowEvent() 
  If EventID = #PB_EventGadget
    Select EventGadgetID()
      Case #Button_0
        ip(#Listview_0,100)
      Case #Button_1
        copie(#Listview_0)  
    EndSelect
  EndIf

Until EventID = #PB_Event_CloseWindow 
End 

Procedure ip(Listview,nombreipscan)
  ExamineIPAddresses()
  For X=0 To nombreipscan
    Resultat = NextIPAddress()
    Chaine$ = IPString(Resultat)
    If chaine$="0.0.0.0"
    Else
      RemoveGadgetItem(Listview,X)
      AddGadgetItem(Listview,X,Chaine$)
    EndIf 
  Next
EndProcedure

Procedure copie(gadget)
  Texte$=GetGadgetText(gadget)
  SetClipboardText(Texte$)
EndProcedure
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

lionel_om a écrit :Mais c'est pas un code PB qu'il voulait ?
Parce que en PHP c'est assez facile, du moins je connaissais déja...

Parce qu'il y a sous doute moyen de savoir savoir en lançant une commande (doit bien y en avoir une), après faut la toruver... :wink:
Tu na pas bien suivi lol

Oui c'est un code PB que je voulais (en php je sais le faire), mais comme apparament PB ne sait pas recup les ip si on est deriere un routeur et bien il fallait que je passe par une page php, et sa je ne savais pas que l'on pouvait faire :wink: maintenant je le sais et c'est plutot pas mal...
Répondre