Si votre machine est en reseau, winsock.localip vous donnera toujours l'adresse reseau (192.....). Cette fonction (getip) trouve ladresse ip en cherchant dans le code html qu'un site lui envoye. La fonction se connecte a un site (www.whatismyip.com) et fait une requette http, le site envoye le code html et la fonction recupere l'ip (dans le code html il y toujours <h1>Your IP Is xxx.xxx.xxx.xxx</h1>). La fonction n'a besoin que d'un winsock. C'est elle qui s'occupe de la connection et de l'arrivee des donnees, donc pas besoin de Private Sub Winsock1_Connect() ou de Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long). Je sais qu'on peut recuperer l'ip d'une maniere plus elegante a l'aide des api mais les api sont pas mon point fort.
Le code n'est pas long et les variables sont explicites, donc pas de commentaires.
Source / Exemple :
Private Function getIp(wns As Winsock) As String
Const adresseSite As String = "www.whatismyip.com"
Const balise1 As String = "<h1>"
Const balise2 As String = "</h1>"
Const attenteMax As Long = 20000
Const txtBalise As String = "Your IP Is "
Dim a As Long
Dim codeHtml As String
Dim partieCodeHtml As String
Dim pos1 As Integer
Dim pos2 As Integer
Dim adresseIp As String
wns.Close
wns.Connect adresseSite, 80
For a = 0 To attenteMax
DoEvents
If wns.State = sckConnected Then Exit For
If a = attenteMax And wns.State <> sckConnected Then
getIp = wns.LocalIP
Exit Function
End If
Next a
wns.SendData "GET http://" & adresseSite & " HTTP/1.0" & vbCrLf & "Accept : text/html" & vbCrLf & vbCrLf
Do
wns.GetData partieCodeHtml
codeHtml = codeHtml & partieCodeHtml
DoEvents
Loop Until wns.State <> sckConnected
wns.Close
pos1 = InStr(1, codeHtml, balise1)
pos2 = InStr(1, codeHtml, balise2)
adresseIp = Mid(codeHtml, pos1 + Len(balise1), pos2 - (pos1 + Len(balise1)))
adresseIp = Replace(adresseIp, txtBalise, "")
'pour ceux qui ont une version anterieure a vb6
'remplacer adresseIp = Replace(adresseIp, txtBalise, "")
'par
'adresseIp = Mid(adresseIp, Len(txtBalise) + 1, Len(adresseIp) - Len(txtBalise))
getIp = adresseIp
End Function
Private Sub Form_Load()
Label1.Caption = getIp(Winsock1)
End Sub
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.