Newsgroup: it.comp.lang.visual-basic
Titolo: Nome macchina da ip

Salve a tutti,
uso un programmino che mi ricava l'IP dal nome che inserisco in un campo
(nome che può essere di una macchina in lan o di un sito),
ora vorrei fare la stessa cosa al contrario, ovvero ricavare il nome del pc
partendo dall'IP, in sintesi dovrebbe emularmi il comando dos "ping -a
xxx.xxx.xxx.xxx".
Come posso fare?
Grazie per l'aiuto, Filippo.

 xxx.xxx.xxx.xxx".
Incolla il codice seguente in un modulo:
<codice>
Option Explicit
Private Const AF_INET = 2
Private Const WSADESCRIPTION_LEN = 257
Private Const WSASYS_STATUS_LEN = 129
Private Type HOSTENT
    hName As Long
    hAliases As Long
    hAddrType As Integer
    hLength As Integer
    hAddrList As Long
End Type
Private Type WSAData
    wVersion As Integer
    wHighVersion As Integer
    szDescription As String * WSADESCRIPTION_LEN
    szSystemStatus As String * WSASYS_STATUS_LEN
    iMaxSockets As Integer
    iMaxUdpDg As Integer
    lpVendorInfo As Long
End Type
Private Declare Function gethostbyaddr Lib "ws2_32.dll" ( _
                                addr As Long, _
                                ByVal addr_len As Long, _
                                ByVal addr_type As Long _
                                ) As Long
Private Declare Function inet_addr Lib "ws2_32.dll" ( _
                                ByVal cp As String _
                                ) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
                                ByRef dst As Any, _
                                ByRef src As Any, _
                                ByVal cbSize As Long _
                                )
Private Declare Function WSACleanup Lib "ws2_32.dll" () As Long
Private Declare Function WSAStartup Lib "ws2_32.dll" ( _
                    ByVal wVR As Long, _
                    ByRef lpWSAD As WSAData _
                    ) As Long
' ---------------------------------------------
Public Function vbGetHostByAddr(ByVal a_IpAddress As String) As String
    Dim pHostEnt As Long
    Dim pAddr As Long
    Dim rec As HOSTENT
    Dim strHost As String
    Dim recWSADta As WSAData
    Dim retVal As Long
    'apre winsock
    retVal = WSAStartup(&H101, recWSADta)
    If (retVal <> 0) Then Exit Function
    'converte l'indirizzo ip in long
    pAddr = inet_addr(a_IpAddress)
 
    If (pAddr) Then
        'puntatore alla struttura HOSTENT
        pHostEnt = gethostbyaddr(pAddr, 4, AF_INET)
 
        If (pHostEnt) Then
            'copia i dati nella struttura
            CopyMemory rec, ByVal pHostEnt, Len(rec)
 
            'riempie un buffer di nulli
            strHost = String(256, 0)
 
            'copia il nome della macchina nel buffer
            CopyMemory ByVal strHost, ByVal rec.hName, 256
 
            'taglia via il nullo finale
            vbGetHostByAddr = Left$(strHost, InStr(1, strHost, vbNullChar) - 1)
 
        End If
 
    End If
 
    WSACleanup
End Function '// vbGetHostByAddr
</codice>
L'ho appena provato sulla mia rete, perche ero un po', ehm, arrugginito,
comunque va :-)
--
hth, hal
--------------------------------
Inviato via 
http://usenet.libero.it


Sai se c'è qualche classe .net (quindi niente api) che permette di fare la
stessa cosa?

 stessa cosa?
System.Net.Dns.GetHostByAddress("xxx.xxx.xxx.xxx").HostName
Cerca nella guida GetHostByAddress e IpHostEntry
Ciao
--
Camplix
-Windows .Net Server (RC1)
-Visual Basic .NET Standard
-Framework Sp2


Grazie mille Hal.
Filippo.

 api) che permette di fare la stessa cosa?
Apro un nuovo thread per rispondere.
Lokar
--
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt