Fonction getip

Contenu du snippet

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

A voir également

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.