Récupérer l'adresse ip du pc (simple)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 039 fois - Téléchargée 36 fois

Contenu du snippet

Une fonction qui renvoie l'adresse IP du pc, j'ai essayé de commenter le plus possible tout en laissant le code lisible.

Source / Exemple :


Private Declare Function WSAStartup Lib "wsock32" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long
Private Declare Function WSACleanup Lib "wsock32" () As Long
Private Declare Function gethostname Lib "wsock32" (ByVal szHost As String, ByVal dwHostLen As Long) As Long
Private Declare Function gethostbyname Lib "wsock32" (ByVal HostName As String) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (xDest As Any, xSource As Any, ByVal nBytes As Long)
Private Const MAX_WSADescription As Long = 256
Private Const MAX_WSASYSStatus As Long = 128
Private Const WS_VERSION_REQD     As Long = &H101
Private Const IP_SUCCESS As Long = 0
Private Const SOCKET_ERROR As Long = -1
Private Const NO_ERROR = 0
Public Type WSADATA
   wVersion                                 As Integer
   wHighVersion                             As Integer
   szDescription(0 To MAX_WSADescription)   As Byte
   szSystemStatus(0 To MAX_WSASYSStatus)    As Byte
   wMaxSockets                              As Integer
   wMaxUDPDG                                As Integer
   dwVendorInfo                             As Long
End Type
Public Type Hostent
   hName      As Long
   hAliases   As Long
   hAddrType  As Integer
   hLen       As Integer
   hAddrList  As Long
End Type

' Renvoie l'adresse IP
Public Function GetIPAddress() As String
    Dim sHostName   As String * 256
    Dim lpHost      As Long
    Dim HOST        As Hostent
    Dim dwIPAddr    As Long
    Dim tmpIPAddr() As Byte
    Dim i           As Integer
    Dim sIPAddr     As String
    
    If Not SocketsInitialize() Then
        GetIPAddress = ""
        Exit Function
    End If
    ' Si GetHostName ne marche pas
    If gethostname(sHostName, 256) = SOCKET_ERROR Then
        GetIPAddress = ""
        Call SocketsCleanup
        Exit Function
    End If
    sHostName = Trim$(sHostName)
    lpHost = gethostbyname(sHostName)
    ' Si l'adresse récupérée est vide
    If lpHost = 0 Then
        GetIPAddress = ""
        Call SocketsCleanup
        Exit Function
    End If
    ' On formate l'adresse pour qu'elle soit de la forme xxx.xxx.xxx.xxx
    CopyMemory HOST, ByVal lpHost, Len(HOST)
    CopyMemory dwIPAddr, ByVal HOST.hAddrList, 4
    ReDim tmpIPAddr(1 To HOST.hLen)
    CopyMemory tmpIPAddr(1), ByVal dwIPAddr, HOST.hLen
    For i = 1 To HOST.hLen
        sIPAddr = sIPAddr & tmpIPAddr(i) & "."
    Next
    ' On renvoie la valeur
    GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
    Call SocketsCleanup
End Function

' Vide le socket
Public Function SocketsCleanup()
    SocketsCleanup = IIf(WSACleanup() = 0, True, False)
End Function

' Initialise le socket
Public Function SocketsInitialize() As Boolean
    Dim WSAD As WSADATA
    SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS
End Function

Conclusion :


Je ne sais pas si ça marche dans le cas d'un routeur ou proxy, mais ça évite de passer par un site web.

@+
MadMatt

A voir également

Ajouter un commentaire

Commentaires

thepoe
Messages postés
30
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
1 juin 2011

Voici une fonction light du GetMyIP en VB 2005, si ca peut aider.

Cet exemple utilise le mode Console, mais la fonction est prête pour être intégrée dans un projet avec Form.

Module Module1
Sub main()
'La fonction retourne un objet du type System.Net.IPAdress
'On choisira la conversion par '.ToString'
Console.WriteLine(("Address: " + GetFirstIp().ToString))
End Sub
Function GetFirstIp()
Try 'Eh oui, maintenant on gere les erreurs...
' Obtenir un conteneur pour les informations sur l'adresse de l'hôte.
Dim heserver As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName())
' Obtenir le premier IP
GetFirstIp = heserver.AddressList(0)
Catch ex As Exception
'En cas d'érreur (genre pas d'ip, pas de carte réseau...),
'on renvoie le message la définissant
GetFirstIp = ex.Message
End Try
End Function
End Module
cpln
Messages postés
4
Date d'inscription
lundi 30 juin 2003
Statut
Membre
Dernière intervention
20 juin 2006

PARFAIT !

C'est exactement ce qu'il me falait !

Il me faut l'adresse local IP pour un réseau interne d'une entreprise pour un log! Cela convient donc parfaitement !

Grazias !
Merci MadM@tt
Morricon
Messages postés
41
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
1 mars 2007

Bizarre... Personne n'a mis de note... Pourquoi ?

Pour ma part cette fonctionne très bien. Même si effectivement une station peut avoir plusieurs adresses (EBArtSoft)

Cependant il y en a toujours une qui est prioritaire sur les autres... Donc généralement la première adresse locale renvoyée sera la première déclarée dans les paramètres réseau.

Pour le reste je dirai que j'y ait trouvé mon compte... et je n'ai pas eu à le réécrire.

Merci MadM@tt

Bonne prog a tous.
MadM@tt
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009

Tiens ça m'interesse cette méthode, mais comment on fait pour savoir (meme dans le dos) à quel adresse IP le serveur il a répondu à mon ping (c'est a dire que cette adresse ip c'est la mienne) ?
Neo.balastik
Messages postés
797
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
4
En effet, y a pas 36 façons d'y arriver...
Eventuellement faire un ping d'un serveur style Google, Yahoo, etc... Beaucoup de chance qu'ils répondent.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.