Newsgroup: it.comp.lang.visual-basic
Titolo: E' possibile con VB reperire l'inidrizzo IP dal nome PC in rete ?

Come da oggetto .. vorrei creare un
pgm in VB ke dato il nome di una postazione
PC connessa in rete locale (TCP) mi reperisca
il numero IP corrispondente .
E' possibile ?

 ha scritto nel messaggio
news:8sjqla$4u54$1...@stargate1.inet.it...


 il numero IP corrispondente .
Le strutture e le funzioni chiamate le trovi nell'API Text Viewer (aggiornato).
Riporto solo la dichiarazione della funzione inet_ntoa perché uso
una forma modificata. (Il tutto fa parte della simulazione Ping che dovrei
inviare al SC in questi giorni, come richiesto tempo fa da Umberto).
Public Declare Function inet_ntoa Lib "Wsock32.dll" (ByVal lIn As Long) As Long
=======================================================
Public Function GetHostIPAddress(lpszHostName As String) As String
Dim HostIPAddr As Long
Dim HostentAddr As Long
Dim Host As HOSTENT
Dim lngSocket As Long
Dim arrIPAddress() As Byte
Dim strAddress As String
Dim sLoop As Integer
Dim icmpPort As Long
   Call SocketsInitialize
   icmpPort = IcmpCreateFile()
   strAddress = lpszHostName
   HostentAddr = gethostbyname(strAddress)
   If HostentAddr = SOCKET_ERROR Then
      HostentAddr = WSAGetLastError()
      GetHostIPAddress = ""
   Else
      CopyMemory Host.hName, ByVal HostentAddr, Len(Host)
      CopyMemory HostentAddr, ByVal Host.hAddrList, 4
      CopyMemory HostIPAddr, ByVal HostentAddr, 4
      strAddress = NetAddressToIPAddress(HostIPAddr)
      GetHostIPAddress = strAddress
   End If
   Call IcmpCloseHandle(icmpPort)
   Call SocketsCleanup
End Function
=======================================================
Public Function SocketsInitialize() As Boolean
'
' Funzione "standard", ricavata da MS SDK
'
Dim WSAD As WSAdata
Dim lngRet As Long
Dim szLoByte As String
Dim szHiByte As String
Dim szBuf As String
   lngRet = WSAStartup(WS_VERSION_REQD, WSAD)
   If lngRet <> 0 Then
       MsgBox "Il Sockets Win32 non risponde.", vbCritical, "Errore Socket"
       SocketsInitialize = False
       Exit Function
   End If
   'Controlla che la versione del socket in dotazione sia
   'adeguata (1.01 o sup.) alle funzioni che vengono usate
   If (LoByte(WSAD.wVersion) < WS_VERSION_MAJOR) Or _
      (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR) And _
       (HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then
       szHiByte = Format$(HiByte(WSAD.wVersion))
       szLoByte = Format$(LoByte(WSAD.wVersion))
       szBuf = "Il Sockets versione " & szLoByte & "." & szHiByte
       szBuf = szBuf & " non è supportato da Windows in ambiente 32 bit."
       MsgBox szBuf, vbCritical, "Errore Socket"
       SocketsInitialize = False
       Exit Function
   End If
   'I socket disponibili sono insufficienti per l'applicazione
   If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then
       szBuf = "L'applicazione richiede almeno " & _
                Format$(MIN_SOCKETS_REQD) & " socket disponibili."
       MsgBox szBuf, vbCritical, "Errore Socket"
       SocketsInitialize = False
       Exit Function
   End If
   SocketsInitialize = True
End Function
Public Function SocketsCleanup() As Boolean
'
' Funzione "standard", ricavata da MS SDK
'
Dim retLng As Long
   retLng = WSACleanup()
   If retLng <> 0 Then
       MsgBox "Si è verificato un errore in fase di chiusura del Socket." & Chr$(13) & _
            "Numero ell'errore: " & Format$(retLng), vbExclamation, "Errore Socket"
       SocketsCleanup = False
   Else
       SocketsCleanup = True
   End If
End Function
Public Function NetAddressToIPAddress(lngAddress As Long) As String
Dim strAddress As String
Dim lngPointer As Long
Dim sAddress As Long
   If lngAddress = 0 Then
      'L'indirizzo è nullo
      Exit Function
   End If
   sAddress = lngAddress
   lngPointer = inet_ntoa(sAddress)
   strAddress = String(32, Chr$(0))
   CopyMemory ByVal strAddress, lngPointer, 32
   If strAddress <> "" Then
      NetAddressToIPAddress = Left$(strAddress, InStr(strAddress, Chr$(0)) - 1)
   Else
      NetAddressToIPAddress = strAddress
   End If
End Function
=======================================================