[Func] Connaitre son adresse IP (internet)

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

[Func] Connaitre son adresse IP (internet)

#1

Message par ZDS »

Rebonjour,
Comme vous le savez, vous ne pouvez pas connaitre votre IP internet tout seul, il vous faut la demander à quelqu'un de l'autre "coté du mirroir", voici une fonction qui appelle simplement DynDNS (si vous ne faites pas confiance à ce site, je vois pas quoi faire ^^) :

Code : Tout sélectionner

Func getIP($timeOutMax = 2000)
    Local $resultat = "", $connexion, $url="http://checkip.dyndns.org/", $fichierTemp=@TempDir&"\~ip.log"
    $connexion = InetGet($url, $fichierTemp, 1, 1)
    Local $timeOut = $timeOutMax
    While $timeOut > 0 And Not InetGetInfo($connexion, 2)
        Sleep(250)
        $timeOut=$timeOut-250
    WEnd
    InetClose($connexion)
    If $timeOut > 0 Then
        Local $fichierHandle = FileOpen($fichierTemp, 0)
        If $fichierHandle <> -1 Then
            Local $contenu = FileRead($fichierHandle)
            If @error = 0 Then
                Local $resultatRegexp = StringRegExp($contenu, '<body>(?:.*?)(\d+.\d+.\d+.\d+)(?:\D?)(?:.*?)</body>', 3)
                If IsArray($resultatRegexp) And UBound($resultatRegexp) > 0 Then
                    If UBound($resultatRegexp) = 1 Then
                        $resultat = $resultatRegexp[0]
                    Else
                        $resultat = "Résultat ambigu"
                    EndIf
                Else
                    $resultat = "Résultat introuvable"
                EndIf
            Else
                $resultat = "Source illisible"
            EndIf
        Else
            $resultat = "Source introuvable"
        EndIf
        FileClose($fichierHandle)
    Else
        $resultat = "Délai dépassé"
    EndIf
    FileDelete($fichierTemp)
    Return $resultat
EndFunc
A bientôt !
Modifié en dernier par ZDS le mer. 16 juin 2010 17:31, modifié 2 fois.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Sh4dows
Status : Hors ligne

Re: [Func] Connaitre son adresse IP (internet)

#2

Message par Sh4dows »

Pourquoi tous cela ?
Une fonction exista déjà :roll:

Code : Tout sélectionner

#include <INet.au3>
MsgBox(0, "IP", "Votre Adresse IP est : "&_GetIP())
 
C'est bien tu réinvente la roue lol !
La fonction existe déjà mais coder diferrement :lol:

Fonction de Inet.au3 :

Code : Tout sélectionner

; #FUNCTION# ====================================================================================================================
; Name...........: _GetIP
; Description ...: Get public IP address of a network/computer.
; Parameters ....: None
; Return values .: On Success - Returns the public IP Address
;                  On Failure - -1  and sets @ERROR = 1
; Author ........: Larry/Ezzetabi & Jarvis Stubblefield
; Remarks .......: Internet access.
; ===============================================================================================================================
Func _GetIP()
    Local $ip, $t_ip
    If InetGet("http://checkip.dyndns.org/?rnd1=" & Random(1, 65536) & "&rnd2=" & Random(1, 65536), @TempDir & "\~ip.tmp") Then
        $ip = FileRead(@TempDir & "\~ip.tmp", FileGetSize(@TempDir & "\~ip.tmp"))
        FileDelete(@TempDir & "\~ip.tmp")
        $ip = StringTrimLeft($ip, StringInStr($ip, ":") + 1)
        $ip = StringTrimRight($ip, StringLen($ip) - StringInStr($ip, "/") + 2)
        $t_ip = StringSplit($ip, '.')
        If $t_ip[0] = 4 And StringIsDigit($t_ip[1]) And StringIsDigit($t_ip[2]) And StringIsDigit($t_ip[3]) And StringIsDigit($t_ip[4]) Then
            Return $ip
        EndIf
    EndIf
    If InetGet("http://www.whatismyip.com/?rnd1=" & Random(1, 65536) & "&rnd2=" & Random(1, 65536), @TempDir & "\~ip.tmp") Then
        $ip = FileRead(@TempDir & "\~ip.tmp", FileGetSize(@TempDir & "\~ip.tmp"))
        FileDelete(@TempDir & "\~ip.tmp")
        $ip = StringTrimLeft($ip, StringInStr($ip, "Your ip is") + 10)
        $ip = StringLeft($ip, StringInStr($ip, " ") - 1)
        $ip = StringStripWS($ip, 8)
        $t_ip = StringSplit($ip, '.')
        If $t_ip[0] = 4 And StringIsDigit($t_ip[1]) And StringIsDigit($t_ip[2]) And StringIsDigit($t_ip[3]) And StringIsDigit($t_ip[4]) Then
            Return $ip
        EndIf
    EndIf
    Return SetError(1, 0, -1)
EndFunc   ;==>_GetIP
 
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [Func] Connaitre son adresse IP (internet)

#3

Message par ZDS »

Chapeau, j'avais cette fonction dans un coin, et je ne savais pas qu'elle existait déjà...

Comment passer pour un con en un seul post :)

[EDIT] Quoi que, question algo, c'est pas 100% vérifié...
Modifié en dernier par ZDS le mer. 16 juin 2010 17:32, modifié 1 fois.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Sh4dows
Status : Hors ligne

Re: [A EFFACER] Connaitre son adresse IP (internet)

#4

Message par Sh4dows »

Tu peux quand même laissé ton Post !
Pas besoin de mettre à effacer :roll: car ton code peux servir aux débutants.

Perso dans mes débuts en AutoIt j'étais "heureux" d'avoir des codes de programmes entier pour en apprendre d'avantage sur comment il fonctionnaientt etc... (Je raconte ma life je :arrow:)

Donc laisse ta fonction :wink:

Cordialement Sh4dows
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [A EFFACER] Connaitre son adresse IP (internet)

#5

Message par timmalos »

Je confirme, cette fonction restera là ou elle est :P
C'est comme ma fonction _InetGet2 qui ne sert a rien en tant que telle mais c'est instructif pour les débutants.
Karachi
Niveau 2
Niveau 2
Messages : 26
Enregistré le : mer. 12 mai 2010 21:27
Status : Hors ligne

Re: [Func] Connaitre son adresse IP (internet)

#6

Message par Karachi »

Par contre, ta fonction est plus longue, environ cinq fois plus de temps sur mon ordinateur.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [Func] Connaitre son adresse IP (internet)

#7

Message par ZDS »

Hello !

C'est normal que ce soit plus lent, pour plusieurs raisons voulues (et oui ^^) :
1 - La plupart du temps, quand on veut consulter son IP, c'est au cas où elle ait changé sans qu'on s'en soit rendu compte (reboot de la box, etc...), d'ou le premier 1 dans InetGet($url, $fichierTemp, 1, 1) qui oblige à recharger la page de DynDNS au lieu de prendre dans le cache (ce qui serait plus rapide la seconde/troisième/n-ième fois, mais donne pas forcément l'adresse actuelle).
2 - J'y ai ajouté un timeOut, pour qu'on puisse sortir de la fonction avant le chargement sur toutes les connexions, d'où la boucle While et le second 1 dans InetGet($url, $fichierTemp, 1, 1) (car si la connexion est lente genre un téléphone portable comme modem et qu'on a pas ce 1, la procédure fige le script le temps qu'on récupère la page, ce qui peut aller jusque 30 secondes voire une minute), donc ça augmente forcement le temps minimum de réponse, mais par contre réduit énormément le temps maximum de 30 à 2 secondes (pour tester, lance la fonction de base avec un proxy en rade ou une "connectivité limitée ou inexistante", puis lance celle là).
3 - J'utilise une RegExp comme "checkeur", au lieu de string split ou string between, ce qui prend plus de temps, mais est sans aucun doute beaucoup plus flexible : il suffirait que le blabla de DynDNS change pour que la fonction de base tombe en rade (par exemple plus d'espace entre l'IP et le reste du texte, ou un "." avant la fin du <body>), moins (pas aucune, mais moins) de chance pour la "mienne".

Donc si "ma" fonction est plus lente, ce n'est pas pour des besoins de performances, mais pour des soucis d'algorithmique (B-Method-like Powa! ^^).

A bientôt!
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Répondre