begin process at 2012 02 13 00:36:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > RÉCUPÉRER SON ADRESSE IP INTERNET (VERSION SIMPLE ET QUI FONCTIONNE)

RÉCUPÉRER SON ADRESSE IP INTERNET (VERSION SIMPLE ET QUI FONCTIONNE)


 Information sur la source

Note :
6 / 10 - par 2 personnes
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseau & Internet Classé sous :ip, internet, récupérer, adresse, externe Niveau :Débutant Date de création :15/01/2006 Vu :19 001

Auteur : bobjay

Ecrire un message privé
Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note

 Description

Il y a déjà de nombreux codes vb traitant ce sujet, j'en suis conscient, mais beaucoup s'avèrent complexes, nécessitent des modules ou d'autres choses bien lourdes ou trop vagues, et on a de la chance quand on trouve un code qui fonctionne bien sur ce sujet... Je trouve ridicule de devoir pondre autant de lignes pour récupérer une simple IP Internet.

C'est donc la raison pour laquelle je poste cette petite source de ma composition, d'un niveau gros débutant, certes, mais qui a le mérite de fonctionner à 100% et qui se présente sous la forme d'une fonction facile à comprendre et à exploiter. Si vous avez trouvé plus simple que moi, soyez indulgents svp, et postez vos solutions, ça fera avancer le chmillblick ;)

Source

  • Function InternetIP() As String
  • 'Cette fonction nécessite 2 controles:
  • 'Un Rich Text Box (que j'ai nommé dans cette source rt1) et un Inet (que j'ai nommé inet1)
  • 'Le controle Inet permet de se connecter à un site ou un ftp, et le controle Rich Text permet de stocker des caractères,
  • 'comme une variable chaine de caractères, mais avec une beaucoup plus grande capacité (ce controle ressemble beaucoup au
  • 'bloc-note de windows au niveau de ses propriétés)
  • 'Si l'on n'arrive pas à se connecter, une erreur surviendra.
  • 'On récupère ici cette erreur pour prévenir l'utilisateur qu'il n'est pas connecté (voir les 2 dernières lignes de la fonction)
  • On Error GoTo PasDeNet
  • 'On se connecte à un site fournissant l'ip (mon-ip.com dans cet exemple) à travers Inet
  • With Inet1
  • .AccessType = icUseDefault 'On spécifie un accès aux données par défaut
  • .Protocol = icHTTP 'On spécifie que l'on travaille en HTTP
  • .RequestTimeout = 5 'On spécifie le temps accordé pour la tentative de connexion
  • RT1.Text = .OpenURL("http://www.mon-ip.com/", icString) 'On spécifie l'Url et la cible (le rich text box) dans laquelle on stocke les données
  • Do Until .StillExecuting = False 'StillExecuting permet d'attendre que toutes les données de la page soient chargées
  • DoEvents
  • Loop
  • End With
  • 'Les variables suivantes servent à repérer l'emplacement de l'ip dans le texte récupéré dans le rich text box
  • Dim DebuT, FiN As String
  • DebuT = "<DIV class=IP>Votre adresse IP est "
  • FiN = "</DIV>"
  • l1 = InStr(1, RT1.Text, DebuT, vbTextCompare)
  • l2 = InStr(l1, RT1.Text, FiN, vbTextCompare)
  • l1 = l1 + Len(DebuT)
  • l2 = l2 - l1
  • 'On renvoie l'ip trouvée
  • InternetIP = Mid(RT1.Text, l1, l2)
  • Exit Function
  • PasDeNet:
  • InternetIP = "Pas de connexion internet détectée ou site de référence offline"
  • End Function
Function InternetIP() As String

'Cette fonction nécessite 2 controles:
'Un Rich Text Box (que j'ai nommé dans cette source rt1) et un Inet (que j'ai nommé inet1)
'Le controle Inet permet de se connecter à un site ou un ftp, et le controle Rich Text permet de stocker des caractères,
'comme une variable chaine de caractères, mais avec une beaucoup plus grande capacité (ce controle ressemble beaucoup au
'bloc-note de windows au niveau de ses propriétés)

'Si l'on n'arrive pas à se connecter, une erreur surviendra.
'On récupère ici cette erreur pour prévenir l'utilisateur qu'il n'est pas connecté (voir les 2 dernières lignes de la fonction)
On Error GoTo PasDeNet
                
            'On se connecte à un site fournissant l'ip (mon-ip.com dans cet exemple) à travers Inet
            With Inet1
            .AccessType = icUseDefault 'On spécifie un accès aux données par défaut
            .Protocol = icHTTP 'On spécifie que l'on travaille en HTTP
            .RequestTimeout = 5 'On spécifie le temps accordé pour la tentative de connexion
            RT1.Text = .OpenURL("http://www.mon-ip.com/", icString) 'On spécifie l'Url et la cible (le rich text box) dans laquelle on stocke les données
            Do Until .StillExecuting = False 'StillExecuting permet d'attendre que toutes les données de la page soient chargées
            DoEvents
            Loop
            End With
                
'Les variables suivantes servent à repérer l'emplacement de l'ip dans le texte récupéré dans le rich text box
Dim DebuT, FiN As String
DebuT = "<DIV class=IP>Votre adresse IP est "
FiN = "</DIV>"
l1 = InStr(1, RT1.Text, DebuT, vbTextCompare)
l2 = InStr(l1, RT1.Text, FiN, vbTextCompare)
l1 = l1 + Len(DebuT)
l2 = l2 - l1

'On renvoie l'ip trouvée
InternetIP = Mid(RT1.Text, l1, l2)
Exit Function

PasDeNet:
InternetIP = "Pas de connexion internet détectée ou site de référence offline"

End Function



 Sources du même auteur

VB6 - FONCTION QUI BLOQUE LE BUREAU
TÉLÉCHARGER UN FICHIER À PARTIR D'UNE URL HTTP

 Sources de la même categorie

Source avec Zip Source avec une capture GESTIONNAIRE DE TÉLÉCHARGEMENT, AVEC REPRISE ET MULTITHREADI... par Madx23
Source avec Zip Source avec une capture CONVERTIR DU TEXTE RTF EN CODE HTML ET VICE-VERSA par vicosta
Source avec Zip Source avec une capture DICTIONAIRE TEXT/AUDIO/VISUELLE ANGLAIS AVEC WEBBROWSER CONT... par majnounmajda
Source avec Zip Source .NET (Dotnet) NSLOOKUP EN VB.NET OU COMMENT FAIRE UNE REQÛETE DNS EN PRÉCI... par ShareVB
Source avec Zip Source avec une capture MINI SEVEUR HTTP AVEC INTERFACE GRAPHIQUE ET IMPLÉMENTATIONS... par lemout

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) INFORMATIONS SUR LES INTERFACES RÉSEAUX par Mayzz
Source avec Zip RÉCUPÉRER L'INDEX D'UNE ADRESSE IP LOCALE À PARTIR DE L'ADRE... par Philippe734
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLE UTILISATEUR IPBOX POUR LA SAISIE D'ADRESSE IP par foliv57
Source avec Zip Source avec une capture MISE À JOUR D'UN DOMAINE DYNDNS ET DÉTECTION IP EXTERNE par tdt63
Source avec Zip Source avec une capture CONNAITRE SON IP APRES CHAQUE RECONNEXION par FMatrix07

Commentaires et avis

Commentaire de crenaud76 le 15/01/2006 23:15:37

Salut,
Pourquoi utiliser un richtextbox pour ca ! Une simple variable de type String aurait fait
l'affaire !!
Et puis ton Doevents se trouve en dehors d ela boucle Do ... Until alors il ne sert pas à grand chose !
Et attention a ta variable "DebuT", qui est un variant et pas une String ! En VB6, il faut donner le type pour chaque variable, même si elles sont déclarées sur une seule et même ligne de déclaration, contrairement au VB.NET
Je te propose aussi d'utiliser la fonction Mid$(), plutot que Mid() : Ce qui me connaisse sauront que c'ets un de mes chevaux de bataille !
Reste plus qu'à essayer de se passer du controle Inet (qu'à défaut je transmettrais personnellement en tant qu'argument de la fonction) et se sera tres bien ...

CR

Commentaire de crenaud76 le 15/01/2006 23:16:28

... mais j'ai oublié de dire que c'était, malgré toutes mes remarques, une bonne source : 7/10 pour moi

CR

Commentaire de bobjay le 15/01/2006 23:52:43

crenaud76,

"Pourquoi utiliser un richtextbox pour ca "
=> Je l'ai expliqué dans les commentaires de ma source (voir ligne 5 et 6 du script): le richtext box me permet de stocker une plus grande quantité de caractères qu'une simple variable string (string est limité à je ne sais plus combien de caracteres tandis que je n'ai jamais encore atteint de limite avec un richtext)

"attention a ta variable "DebuT", qui est un variant et pas une String"
=> Je suis étonné que tu ne dise rien à propos de mes variables L1 et L2 que j'ai omis de déclarer :p
J'aime beaucoup le VB pour ça, on n'est pas obligé d'être super rigoureux au niveau des déclarations des variables pour que ça fonctionne, on gagne un temps fou lorsque l'on développe des bouts d'essais, par contre quand on réalise une appli sérieuse, il est clair qu'il vaut mieux faire attention et déclarer toutes ses variables (vive l'option Explicit pour retrouver ses oublis de déclaration hihihi). Néanmoins je peux t'assurer que cette source fonctionne telle qu'elle est affichée sur cette page, que les variables soient bien déclarées ou non, car je l'ai copié-collé direct de mon projet vb (j'aime bien tester avant de poster).

En tout cas, je te remercie pour ta note, c'est plutot sympa car je ne trouve pas que ça le mérite, vu le faible niveau de programmation que ça demande... Je suis certain que d'autres peuvent mieux faire que mon "bricolage",j'espère simplement que ça pourra aider quelques débutants en attendant qu'un code + court et + efficace se présente ;)

@+

Commentaire de crenaud76 le 16/01/2006 00:08:27

1- Le type String est limité à 64 Ko, soit 2 puissance 16 caractères : Avant de remplir tout ca avec le source d'une page HTML, il y aura de l'eau de couler sous les ponts
2- Exact pour la non déclaration de l1 et l2, cela m'avait échappé. Pour ce qui est de ne pas déclarer les variables, je suis ... TOTALEMENT CONTRE !!! Même pour un petit bout de code d'essai : Personnellement, j'ai activé l'option de VB qui ajoute automatiquement un "Option Explicit" quand tu crées un nouveau module, comme cela, je ne l'oublie jamais et je suis sur d'être obliger de déclarer mes variables, ce que, encore une fois, je pense être une tres bonne chose, même si un module de test va passer pour cela de 10 lignes à 20 lignes. Cela évite les bug du à une faute de frappe, fait que l'on sait toujours de quoi l'on parle et permet de fuir comme la peste les variants (cela rejoint ma croisade pourla réhabilitation des fonctions $)
3- Ma note à ta source, je la justifie en disant simplement que ton code est court (~20 lignes sans les comments), il est commenté et fait bien ce qu'ilest censé faire.

CR

Commentaire de Renfield le 16/01/2006 09:47:35 administrateur CS

je soutiens Crenaud76... ajoutes un Option Explicit, et lance ton programme en pressant Ctrl + F5 (ces deux aspects pouvant être rendus automatiques, dans les options)

gain de temps ? un Dim n'est pas bien long, accélère le code (pas de Variant)
et évite bien des tracas (fautes de frappe, casting, etc)

le RichTextBox est inutile....
un String suffit très largement.... surtout pour la page utilisée (7.5 ko)

le contrôle Inet aussi, mais c'est excusable... c'est un moyen simple d'accéder au Web...(je favoriserai les API)

Commentaire de jack le 16/01/2006 10:35:15 administrateur CS

N-ième source utilisant le même principe (cherche "IP public")

Non, une String est "limitée" à 2 Gbytes, sauf en utilisation à longueur fixe, genre "Dim monTexte As String * X" où X ne peut pas dépasser 65400.
Une TextBox est limitée à 2048 caractères ou 32k en mode MultiLigne.
Une RichTextBox n'a pas de limite (mémoire du PC)

Commentaire de Neo.balastik le 16/01/2006 10:53:54

Salut ;O)

Source sans passer par le contrôle Inet - Utilisation de l'API wininet
(tirée de l'API-Guide) et s'inspirant de la source postée :

Option Explicit

Const scUserAgent = "API-Guide test program"
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_FLAG_RELOAD = &H80000000
Const sURL As String = "http://www.mon-ip.com/"

Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Sub Form_Load()

    Dim hOpen    As Long
    Dim hFile    As Long
    Dim Ret      As Long
    Dim lOffset1 As Long
    Dim lOffset2 As Long
    Dim sBuffer  As String
    
    Const sStart  As String = "<DIV class=IP>Votre adresse IP est "
    Const sEnd    As String = "</DIV>"
    
    'Create a buffer for the file we're going to download
    sBuffer = Space(5000)
    'Create an internet connection
    hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
    'Open the url
    hFile = InternetOpenUrl(hOpen, sURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
    
    'Read the first 5000 bytes of the file
    InternetReadFile hFile, sBuffer, 5000, Ret
    'clean up
    InternetCloseHandle hFile
    InternetCloseHandle hOpen
            
    lOffset1 = InStr(1, sBuffer, sStart, vbTextCompare)
    lOffset2 = InStr(lOffset1, sBuffer, sEnd, vbTextCompare)
    lOffset1 = lOffset1 + Len(sStart)
    lOffset2 = lOffset2 - lOffset1

    MsgBox "Adresse IP : " & Mid$(sBuffer, lOffset1, lOffset2)

End Sub

Commentaire de crenaud76 le 16/01/2006 10:59:00

Jack < Exact pour la taille des String ! en longueur variable c'est bien 2 puissance 32 caractères
Devait déjà dormir à minuit quand j'ai posté !!

Commentaire de BruNews le 16/01/2006 10:59:34 administrateur CS

Un textbox (classe 'EDIT' pour Windows) en multilne n'est virtuellement limité que par la mémoire disponible, 32 Ko est seulement le buffer qu'il alloue par défaut quand il est créé.
On peut tout à fait le changer à l'exécution, voici exemple en C que je vous laisse traduire:

hedtxt est le handle du textbox.

int __stdcall PrepBuffEdit()
{
  HLOCAL pbuff;
  pbuff = (HLOCAL) SendMessage(hedtxt, EM_GETHANDLE, 0, 0);
  if(pbuff) LocalFree(pbuff);
  pbuff = LocalAlloc(LHND, 2097152); // 2 Mo
  if(!pbuff) return 0;
  SendMessage(hedtxt, EM_SETHANDLE, (WPARAM) pbuff, 0);
  SendMessage(hedtxt, EM_LIMITTEXT, 2097151, 0);
  return 1;
}

ATTENTION, si on ferme la fenêtre contenat le EDIT sans finir le prog, il est de la responsabilité du développeur de libérer la mémoire.

Commentaire de XtremDuke le 16/01/2006 13:22:47

Oui c'est simple et efficace mais pas très souple : que se passe-t-il si le site est HS ?
Comme beaucoup, je te conseillerai l'utilisation d'API comme la source suivante : http://www.vbfrance.com/code.aspx?ID=5704

Commentaire de bobjay le 16/01/2006 13:59:54

Jack, je suis au courant que c'est la N-eme source à traiter le sujet (d'ailleurs tu n'as pas du lire la description de la fonction, tu aurais vu que je t'ai précédé sur cette remarque lol). Si j'ai décidé de publier ce code, c'est parce qu'il m'a semblé un poil plus clair que les autres, et qu'on n'est pas obligé de télécharger un fichier Zip pour pouvoir lire un code si simplet (je n'apprécie pas trop de devoir télécharger des fichiers pour lire 10 petites lignes de code). Ok ce sont des arguments de fainéant, mais n'est-ce pas le but de l'informatique de nous faciliter la vie ?

Neo.balastik, merci pour ta source qui nous permet d'économiser les controles, certes ce code est légèrement plus long que le mien à cause des déclarations de l'api, mais c'est génial et ça vaut  vraiment le coup si on peu éviter d'utiliser des controles !

BruNews, ne le prends surtout pas mal, mais il me semble qu'il s'agit d'un site VB ici, alors les exemples en C, c'est bien gentil mais on peut surement s'en dispenser...

Crenaud76, on ne va pas se battre pour une histoire de capacité de variable tout de même lol. Pour la déclaration j'avoue avoir un comportement barbare, peut etre est-ce du à l'époque ou je programmais en Basic, ou il fallait jusqu'a déclarer le numéro de la ligne de code que l'on écrivait. Le VB fut pour moi assez "magique" justement de ne pas boguer pour un simple oubli de déclaration de variable alors j'en profite un petit peu, mais je ne suis vraiment pas un exemple à suivre, tout bon programmeur qui se respecte doit impérativement déclarer chaque variable, ne serait-ce que pour assurer un meilleur controle de l'application développée. De plus il est clair qu'une simple var string fait largement l'affaire pour ce genre de traitement, mais j'ai appris à toujours voir + grand car je ne suis pas à l'abris d'utiliser cette fonction pour trouver autre chose qu'une IP dans une page html (qui peut le plus peut le moins, mais l'inverse est plus difficile). Conclusion pour récupérer votre IP Internet avec le code que j'ai proposé, laissez tomber le RichText et utilisez une var String si vous désirez davantage simplifier ce code.

Merci à tous pour vos précieuses remarques, vos corrections et à bientot !

PS: Si je propose une autre source, promis je tacherais d'être plus rigoureux avec mes variables ;)

Commentaire de Renfield le 16/01/2006 15:22:49 administrateur CS

les exemples en C....
ce code est très facilement portable en VB, et convient tout autant aux contrôles TextBox de ce dernier....

Commentaire de ratala le 17/01/2006 22:32:23

salut tout le monde, quelqun aurait l'aimabilité de m'expliquer (clairement si possible...) quelle est la différence entre les fonction mid$ et mid ?

Commentaire de Renfield le 18/01/2006 08:19:10 administrateur CS

"Amabilité"

Mid$ (comme toutes les fonctions avec un '$' )
renvoie un String....

Mid, quant à elle renvoie un Variant, qui doit ensuite être transformé (casté) en String.

un étape de moins, en ajoutant simplement un '$' et un brin de rapidité supplémentaire...

Commentaire de ratala le 18/01/2006 13:06:12

A ok merci Renfield

Commentaire de phenX le 20/01/2006 16:43:00

je vois pas bien l'intérêt dans le sens où un script VBS le ferais en deux lignes de code, il suffit alors d'appeller le script avec un shell et le tour est joué

Commentaire de Renfield le 20/01/2006 16:45:59 administrateur CS

quel interet de passer par un script VBS ?

Commentaire de phenX le 20/01/2006 16:51:50

ben c pareil, sauf que ca ce fait en deux lignes au lieux de autant que dans le code donné ci dessu

   Dim objSocket

   Set objSocket = CreateObject("MSWinsock.Winsock")
   msgbox ("Votre Adresse IP est:" & objSocket.localip)

ca va quand même plus vite non?

Commentaire de Renfield le 20/01/2006 17:07:38 administrateur CS

certes.
mais aucunement besoin d'un vbs pour ca....

l'IP donnée ici est l'IP internet, pas l'IP locale.

Commentaire de crenaud76 le 20/01/2006 21:44:10

ET puis executer un script est térriblement dangeureux !!! Qu'est-ce qui te dis que le script que tu va exectuer n'a pas été remplacé par un script destructeur ?

CR

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

récupérer l'adresse ip de qq? [ par toto ] Bonjour ,peut-on récupérer l'adresse IP de qq qui est connecté sur Internet? si oui, comment faire en VB? il faut bien sûr que la personne soit connec Comment récupérer l'adresse IP et autres infos réseau sans Wsock ? [ par Filou07 ] Comment puis-je récupérer l'adresse IP, le nom et les autres infos réseau de ma machine, mais sans utiliser Winsock (par pitié) ? Adresse IP externe... [ par Jos ] Bonjour, Depuis plusieur heures, je tente d'y parvenir, mais rien n'y passe, alors j'apprécierais votre aide! Voilà, je souahite récupèrer l'adres Qui peut me dire comment on arrive a récupérer l'adresse IP d'une machine en VBscript [ par Nitocris ] C'est trés simple je veux seulement faire un petit code qui permet de m'afficher l'adresse IP de la machine, j'ai fait un truc, mais ca marche pas.Set Qui peut me dire comment on arrive a récupérer l'adresse IP d'une machine en VBscript [ par Nitocris ] C'est trés simple je veux seulement faire un petit code qui permet de m'afficher l'adresse IP de la machine, j'ai fait un truc, mais ca marche pas.Set Qui peut me dire comment on arrive a récupérer l'adresse IP d'une machine en VBscript [ par Nitocris ] C'est trés simple je veux seulement faire un petit code qui permet de m'afficher l'adresse IP de la machine, j'ai fait un truc, mais ca marche pas.Set Comment récupérer L'IP d'un site web [ par Magidev ] Je voudrais récupérer l'adresse IP d'une adresse webque l'on tape dans mon programme adresse ip internet [ par jpz ] comment est-ce que je peux recuperer dans vb mon adresse ip internet (pas mon IP locale)mon ip locale est 10.0.0.1moi je voudrais recuperer l'IP qui m adresse IP en VBScript [ par logik51 ] Salut,dans un script de connexion, j'ai besoin de récupérer l'@ IP du client.C'est une routine VBScript qui est utilisée.Merci de me dire si vous avez Adresse IP d'une machine sur un réseau [ par kpfeu ] Bonjour,j'ai vu sur ce site des codes permettant de récupérer l'adresse ip de la machine ou est éxécuté le prog et ce avec une fonction qui permet de


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales