|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic Network Services gethostbyname: Resolve Host Name to IP Address |
|
Posted: | Wed March 23, 2000 |
Updated: | Monday December 26, 2011 |
Applies to: | VB4-32, VB5, VB6 |
Developed with: | VB6, Windows NT4 |
OS restrictions: | None |
Author: | VBnet - Randy Birch |
Related: |
Netbios: Determine Local Adapter MAC Address SendARP: Determine Local or Remote Adapter MAC Addresses gethostbyaddr: Obtain Host Name from IP Address IcmpSendEcho: Ping a Machine by IP Address IcmpSendEcho: Ping a Machine by Host Name URLDownloadToFile: Obtain Machine's Public IP Behind Router |
Prerequisites |
Network or DUN connection. |
|
This is a simple function that takes a local or remote machine name, or a domain or web address, and returns the IP address. |
BAS Module Code |
None. |
|
Form Code |
To a form add a command button (Command1) and a text box, along with the following code: |
|
Option Explicit'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Const IP_SUCCESS As Long = 0 Private Const MAX_WSADescription As Long = 256 Private Const MAX_WSASYSStatus As Long = 128 Private Const WS_VERSION_REQD As Long = &H101 Private Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF& Private Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF& Private Const MIN_SOCKETS_REQD As Long = 1 Private Const SOCKET_ERROR As Long = -1 Private Const ERROR_SUCCESS As Long = 0 Private Type WSADATA wVersion As Integer wHighVersion As Integer szDescription(0 To MAX_WSADescription) As Byte szSystemStatus(0 To MAX_WSASYSStatus) As Byte wMaxSockets As Long wMaxUDPDG As Long dwVendorInfo As Long End Type Private Declare Function gethostbyname Lib "wsock32.dll" _ (ByVal hostname As String) As Long Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" _ (xDest As Any, _ xSource As Any, _ ByVal nbytes As Long) Private Declare Function lstrlenA Lib "kernel32" _ (lpString As Any) As Long Private Declare Function WSAStartup Lib "wsock32.dll" _ (ByVal wVersionRequired As Long, _ lpWSADATA As WSADATA) As Long Private Declare Function WSACleanup Lib "wsock32.dll" () As Long Private Declare Function inet_ntoa Lib "wsock32.dll" _ (ByVal addr As Long) As Long Private Declare Function lstrcpyA Lib "kernel32" _ (ByVal RetVal As String, _ ByVal Ptr As Long) As Long Private Declare Function gethostname Lib "wsock32.dll" _ (ByVal szHost As String, _ ByVal dwHostLen As Long) As Long Private Sub Command1_Click() Dim sHostName As String If SocketsInitialize() Then 'obtain and pass the host address to the function Text1.Text = GetMachineName() Text2.Text = GetIPFromHostName(Text1.Text) SocketsCleanup Else MsgBox "Windows Sockets for 32 bit Windows " & _ "environments is not successfully responding." End If End Sub Private Function SocketsInitialize() As Boolean Dim WSAD As WSADATA Dim success As Long SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS End Function Private Sub SocketsCleanup() If WSACleanup() <> 0 Then MsgBox "Windows Sockets error occurred in Cleanup.", vbExclamation End If End Sub Private Function GetMachineName() As String Dim sHostName As String * 256 If gethostname(sHostName, 256) = ERROR_SUCCESS Then GetMachineName = Trim$(sHostName) End If End Function Private Function GetIPFromHostName(ByVal sHostName As String) As String 'converts a host name to an IP address Dim nbytes As Long Dim ptrHosent As Long 'address of HOSENT structure Dim ptrName As Long 'address of name pointer Dim ptrAddress As Long 'address of address pointer Dim ptrIPAddress As Long Dim ptrIPAddress2 As Long ptrHosent = gethostbyname(sHostName & vbNullChar) If ptrHosent <> 0 Then 'assign pointer addresses and offset 'Null-terminated list of addresses for the host. 'The Address is offset 12 bytes from the start of 'the HOSENT structure. Note: Here we are retrieving 'only the first address returned. To return more than 'one, define sAddress as a string array and loop through 'the 4-byte ptrIPAddress members returned. The last 'item is a terminating null. All addresses are returned 'in network byte order. ptrAddress = ptrHosent + 12 'get the IP address CopyMemory ptrAddress, ByVal ptrAddress, 4 CopyMemory ptrIPAddress, ByVal ptrAddress, 4 CopyMemory ptrIPAddress2, ByVal ptrIPAddress, 4 GetIPFromHostName = GetInetStrFromPtr(ptrIPAddress2) End If End Function Private Function GetStrFromPtrA(ByVal lpszA As Long) As String GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0) Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA) End Function Private Function GetInetStrFromPtr(Address As Long) As String GetInetStrFromPtr = GetStrFromPtrA(inet_ntoa(Address)) End Function |
Comments |
|
|
|
|||||
|
|||||
|
|||||
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |