Newsgroup: it.comp.lang.visual-basic
Titolo: tcp-ip

esiste un modo in vb per verificare l'indirizzo IP di un  pc collegato a
rete ethernet ?
Grazie
Marco G.

 ha scritto nel messaggio
news:8ucpdt$mi7$1...@nslave3.tin.it...


 rete ethernet ?
Quella che segue è la procedura minima per recuperare l'IP address di
un host (ovviamente intendevi "tramite codice" no?)
Alla funzione GetHostIPAddress() passi il nome dell'host. Se non sai come
ottenerlo, vedi la funzione dell'API Winsock:
Public Declare Function gethostname Lib "wsock32.dll" _
        (ByVal szHost As String, _
        ByVal dwHostLen As Long) As Long
Non usare la funzione del Kernel GetComputerName(); è noto
che il nome dell'host può differire dal nome del computer.
=======================================================
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.
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
=======================================================


Se fai una ricerca con le parole chiave "indirizzo ip" sui post dell' ultimo
mese, trovi piu' di venti messaggi.
Ti segnalo in particolare il reply di Jimi del 30 ottobre, intitolato "Re:
TCP/IP ->", che penso faccia al caso tuo.
Ciao
Aldo

 TCP/IP ->", che penso faccia al caso tuo.
Ho avuto anch'io la stessa idea :)))

Il codice che ho postato è parte di un progetto più complesso.
Non ho fatto un gran lavoro nella pulizia del codice.
Sostituisci la funzione GetHostIPAddress() con quella che segue,
che è anche commentata.
lpszHostName è il nome dell'host di cui si ricerca l'IP address
strHostAlias è un buffer in cui viene ritornato l'FQDN dell'host.
==========================================
Public Function GetHostIPAddress( _
        lpszHostName As String, _
        strHostAlias As String) As String
Dim HostIPAddr As Long
Dim HostentAddr As Long
Dim Host As HOSTENT
Dim strAddress As String
   strAddress = lpszHostName
   'Fully Qualified Domain Name dell'host
   strHostAlias = String(255, Chr$(0))
   'Ottiene informazioni sull'host indicato
   HostentAddr = gethostbyname(strAddress)
   If HostentAddr = SOCKET_ERROR Then
      'Si è verificato un errore
      GetHostIPAddress = ""
   Else
      'Copia la struttura puntata da HostentAddr nella struttura Host
      CopyMemory Host, ByVal HostentAddr, Len(Host)
      'Recupera il network address dell'host. Il doppio passaggio
      'si rende necessario perché il valore contenuto in .hAddrList
      'è il puntatore ad un puntatore
      CopyMemory HostentAddr, ByVal Host.hAddrList, 4
      CopyMemory HostIPAddr, ByVal HostentAddr, 4
      'Recupera il FQDN dell'host
      CopyMemory ByVal strHostAlias, ByVal Host.hName, 255
      strHostAlias = Left$(strHostAlias, InStr(strHostAlias, Chr$(0)) - 1)
      'Converte il network address dell'host nell'indirizzo IP
      strAddress = NetAddressToIPAddress(HostIPAddr)
      GetHostIPAddress = strAddress
   End If
End Function
==========================================