OVH Cloud OVH Cloud

Récupérer l'adresse IP

4 réponses
Avatar
RENAUD Eric
Bonjour,

Je souhaiterai récupérer l'adresse IP d'une machine à partir du nom de
l'ordinateur.

Je sais le faire avec la commande Ping via le DOS mais sous VB je sèche
J'ai regardé du coté de du controle Winsock mais sans succès.

Sous DOS j'utilise : ping.exe -a W27CPQ2554

D'avance merci

4 réponses

Avatar
news1
Voici un exemple

IP_Address = GetIP()

'--------------------------------------------------------------------
'retourne adresse IP

Function GetIP()
Dim ws : Set ws = CreateObject("WScript.Shell")
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
Dim TmpFile : TmpFile = fso.GetSpecialFolder(2) & "/ip.txt"
Dim ThisLine, IP
If ws.Environment("SYSTEM")("OS") = "" Then
ws.run "winipcfg /batch " & TmpFile, 0, True
Else
ws.run "%comspec% /c ipconfig > " & TmpFile, 0, True
End If
With fso.GetFile(TmpFile).OpenAsTextStream
Do While NOT .AtEndOfStream
ThisLine = .ReadLine
If InStr(ThisLine, "Adresse") <> 0 or InStr(ThisLine, "Address")
<> 0 Then IP = Mid(ThisLine, InStr(ThisLine, ":") + 2)
Loop
.Close
End With

'WinXP (NT? 2K?) leaves a carriage return at the end of line

If IP <> "" Then
If Asc(Right(IP, 1)) = 13 Then IP = Left(IP, Len(IP) - 1)
End If
GetIP = IP
fso.GetFile(TmpFile).Delete
Set fso = Nothing
Set ws = Nothing
End Function
Avatar
X
Bonjour,

Avec Winsock que tu évoques, voici:

Text1 = Winsock1.LocalIP

------------------



"RENAUD Eric" a écrit dans le message de news:

| Bonjour,
|
| Je souhaiterai récupérer l'adresse IP d'une machine à partir du nom de
| l'ordinateur.
|
| Je sais le faire avec la commande Ping via le DOS mais sous VB je sèche
| J'ai regardé du coté de du controle Winsock mais sans succès.
|
| Sous DOS j'utilise : ping.exe -a W27CPQ2554
|
| D'avance merci
|
|
Avatar
Vincent Guichard
RENAUD Eric a écrit :
Bonjour,

Je souhaiterai récupérer l'adresse IP d'une machine à partir du nom de
l'ordinateur.

Je sais le faire avec la commande Ping via le DOS mais sous VB je sèche
J'ai regardé du coté de du controle Winsock mais sans succès.

Sous DOS j'utilise : ping.exe -a W27CPQ2554

D'avance merci




Tu peux le faire avec les APIs.

Voici un exemple simplifié à partir des exemples de l'APIGuide
(http://www.allapi.net/)

Espérant que cela te serve,

Vincent Guichard

Dans une form avec un textbox et un bouton:

Private Sub Command1_Click()
Dim hHostent As Hostent, AddrList As Long
Dim Address As Long, rIP As String
Dim HostName As String, Datas As WSAData
HostName = Left$(Text1.Text, 64)
Call WSAStartup(&H101, Datas)
If GetHostByName(HostName + String(64 - Len(HostName), 0)) <>
SOCKET_ERROR Then
CopyMemory hHostent.h_name, ByVal GetHostByName(HostName +
String(64 - Len(HostName), 0)), Len(hHostent)
CopyMemory AddrList, ByVal hHostent.h_addr_list, 4
CopyMemory Address, ByVal AddrList, 4
Dim s As String
MsgBox (Address Mod 256) & "." & (Address 256 Mod 256) & "."
& (Address 256 256 Mod 256) & "." & (Address 256 256 256)
Else
MsgBox "Impossible d'obtenir l'adresse de " & HostName
End If
WSACleanup
End Sub

Dans un module:
Public Const SOCKET_ERROR = 0
Public Const MAX_WSADescription = 256
Public Const MAX_WSASYSStatus = 128
Public Type Hostent
h_name As Long
h_aliases As Long
h_addrtype As Integer
h_length As Integer
h_addr_list As Long
End Type
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 Declare Function GetHostByName Lib "wsock32.dll" Alias
"gethostbyname" (ByVal HostName As String) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"
(hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Public Declare Function WSACleanup Lib "WSOCK32" () As Long
Public Declare Function WSAStartup Lib "WSOCK32" (ByVal wVersionRequired
As Long, lpWSADATA As WSAData) As Long
Avatar
Jacques93
Bonjour RENAUD Eric,
RENAUD Eric a écrit :
Bonjour,

Je souhaiterai récupérer l'adresse IP d'une machine à partir du nom de
l'ordinateur.

Je sais le faire avec la commande Ping via le DOS mais sous VB je sèche
J'ai regardé du coté de du controle Winsock mais sans succès.

Sous DOS j'utilise : ping.exe -a W27CPQ2554




En complément des réponses de news1, X et Vincent Guichard, une méthode
avec WMI, pour varier ;-) :

Private Sub GetIpConfig(Optional Station As String = "localhost")
Dim Locator As SWbemLocator
Dim Service As SWbemServices
Dim NicSet As SWbemObjectSet
Dim Nic As SWbemObject

Set Locator = New WbemScripting.SWbemLocator
Set Service = Locator.ConnectServer(Station, "rootcimv2")
Set NicSet = Service.ExecQuery("Select * From
Win32_NetworkAdapterConfiguration Where IPEnabled = True")

Service.Security_.ImpersonationLevel = wbemImpersonationLevelImpersonate

For Each Nic In NicSet

Debug.Print "Nom de l'hôte : " & Nic.DNSHostName
Debug.Print "Decription : " & Nic.Description
Debug.Print "Addresse : " & Nic.IPAddress(0)
Debug.Print "Masque : " & Nic.IPSubnet(0)
Debug.Print "Passerelle : " & Nic.DefaultIPGateway(0)
Debug.Print "DHCP : " & Format(Nic.DHCPEnabled)
Debug.Print "DNS Serv 1 : " & Nic.DNSServerSearchOrder(0)
Debug.Print "DNS Serv 2 : " & Nic.DNSServerSearchOrder(1)
Debug.Print "Mac Addr : " & Nic.MACAddress

Next
End Sub


Il faaut ajouter une référence à *Microsoft WMI Scripting*
--
Cordialement,

Jacques.