(view source code of whoiscls.vbs as plain text)
Option Explicit
Dim objDomain
Set objDomain = New WhoIs
objDomain.Debug = False
objDomain.DomainName = "youtube.com"
objDomain.ConnectTimeOut = 25
objDomain.Query
WScript.Echo "Whois Version : " & objDomain.Version
WScript.Echo "Domain Name : " & objDomain.DomainName
If objDomain.ErrorNumber = 0 Then
WScript.Echo "Registrar : " & objDomain.Registrar
WScript.Echo "Whois Server : " & objDomain.WhoisServer
WScript.Echo "Referral URL : " & objDomain.ReferralURL
WScript.Echo "Name Servers : " & objDomain.NameServers
WScript.Echo "Status : " & objDomain.Status
WScript.Echo "Creation Date : " & objDomain.CreationDate
WScript.Echo "Last Updated : " & objDomain.DateUpdated
WScript.Echo "Expiration Date : " & objDomain.ExpirationDate
Else
WScript.Echo "Error Number : " & objDomain.ErrorNumber
WScript.Echo "Error Description : " & objDomain.ErrorDescription
WScript.Echo "Error Source : " & objDomain.ErrorSource
End If
Set objDomain = Nothing
Class WhoIs
' This class uses Network Solutions, Inc.'s Whois page to
' retrieve information for .com, .org, and .net domains.
' Note that this class will break as soon as Network Solutions
' alters the layout of the Whois results pages.
'
' Properties:
' DomainName R/W [string] domain name to be queried, e.g. "google.com"
' ConnectTimeOut R/W [integer] time-out in seconds, default 15
' CreationDate R [date] creation date of the whois record
' DateUpdated R [date] date of the whois record's last update
' Debug R/W [boolean] if TRUE, Internet Explorer window will become
' and remain visible, and will not be terminated
' ErrorDescription R [string] a short description of the error that occurred
' ErrorNumber R [integer] 0: ok, 462: connection error or time-out,
' 10001: query error, 10002: can't handle return
' format (as in .edu domains)
' ErrorSource R [string] a short description of the source of the error
' ExpirationDate R [date] expiration date of the whois record
' NameServers R [string] comma separated list of DNS servers
' ReferralURL ** R [string] URL of registrar's website
' Registrar R [string] company name of registrar
' Status R [string] comma separated list of domain registry flags
' Version R [string] version number of this class
' WhoisServer ** R [string] hostname of the registrar's whois server
' ** property empty for .org domains
'
' Method:
' Query( ) start the query for the domain specified by DomainName
'
' Change Log:
' May 5, 2007 Added Debug, ErrorNumber, ErrorDescription, ErrorSource
' and Version properties, fixed errors in .org domain handling
' April 28, 2007 First public release
'
' Written by Rob van der Woude
' http://www.robvanderwoude.com
' Declare all our private, or local, variables
Private arrLine, arrStatus, arrString, arrText, blnTimedOut
Private colMatches, i, objIE, objRE, strStatus, strString, x
Private m_ConnectTimeOut, m_CreationDate, m_Debug, m_ErrorNumber
Private m_ErrorDescription, m_ErrorSource, m_DateUpdated
Private m_DomainName, m_ExpirationDate, m_NameServers
Private m_ReferralURL, m_Registrar, m_Status, m_Version, m_WhoisServer
' Initialize the variables when the class is initialized
Private Sub Class_Initialize
blnTimedOut = False
i = 0
m_ConnectTimeOut = 10
m_CreationDate = vbNull
m_DateUpdated = vbNull
m_Debug = False
m_DomainName = ""
m_ErrorNumber = 0
m_ErrorDescription = ""
m_ErrorSource = ""
m_ExpirationDate = vbNull
m_NameServers = ""
m_ReferralURL = ""
m_Registrar = ""
m_Status = ""
m_Version = "1.10"
m_WhoisServer = ""
strString = ""
End Sub
' Get the ConnectTimeOut value
Public Property Get ConnectTimeOut
ConnectTimeOut = m_ConnectTimeOut
End Property
' Set the ConnectTimeOut value
Public Property Let ConnectTimeOut( myTimeOut )
If IsNumeric( myTimeOut ) Then
m_ConnectTimeOut = CInt( myTimeOut )
Else
m_ConnectTimeOut = 0
Err.Raise 5
End If
End Property
' Get the CreationDate value (read-only)
Public Property Get CreationDate
CreationDate = m_CreationDate
End Property
' Get the CreationDate value (read-only)
Public Property Get DateUpdated
DateUpdated = m_DateUpdated
End Property
' Get the Debug value
Public Property Get Debug
Debug = m_Debug
End Property
' Set the Debug value
Public Property Let Debug( blnDebug )
If blnDebug = True Then
m_Debug = True
Else
m_Debug = False
End If
End Property
' Get the DomainName value
Public Property Get DomainName
DomainName = m_DomainName
End Property
' Set the DomainName value
Public Property Let DomainName( myDomain )
myDomain = Trim( LCase( myDomain ) )
' Check the format of the domain name
Set objRE = New RegExp
objRE.Global = False
objRE.IgnoreCase = True
objRE.Pattern = "^[a-z][a-z_0-9-]+\.[a-z]{2,8}$"
Set colMatches = objRE.Execute( myDomain )
If colMatches.Count = 1 Then
m_DomainName = myDomain
Else
m_DomainName = ""
Err.Raise 5
End If
Set colMatches = Nothing
Set objRE = Nothing
End Property
' Get the Error Number (read-only)
Public Property Get ErrorNumber
ErrorNumber = m_ErrorNumber
End Property
' Get the Error Description (read-only)
Public Property Get ErrorDescription
ErrorDescription = m_ErrorDescription
End Property
' Get the Error Source (read-only)
Public Property Get ErrorSource
ErrorSource = m_ErrorSource
End Property
' Get the ExpirationDate value (read-only)
Public Property Get ExpirationDate
ExpirationDate = m_ExpirationDate
End Property
' Get the NameServers value (read-only)
Public Property Get NameServers
NameServers = m_NameServers
End Property
' Get the ReferralURL value (read-only; empty for .org domains)
Public Property Get ReferralURL
ReferralURL = m_ReferralURL
End Property
' Get the Registrar value (read-only)
Public Property Get Registrar
Registrar = m_Registrar
End Property
' Get the Status value (read-only)
Public Property Get Status
Status = m_Status
End Property
' Get this class' version number (read-only)
Public Property Get Version
Version = m_Version
End Property
' Get the WhoisServer value (read-only; empty for .org domains)
Public Property Get WhoisServer
WhoisServer = m_WhoisServer
End Property
' Retrieve the information from Network Solutions
' and set the class' read-only properties accordingly
Public Function Query
' Open the appropriate NetSol WhoIs URL in
' an "invisible" Internet Explorer window
Set objIE = CreateObject( "InternetExplorer.Application" )
objIE.Visible = m_Debug
objIE.Navigate2 "https://www.networksolutions.com/whois/" _
& "registry-data.jsp?domain=" & m_DomainName
' Wait till IE is ready
Do While objIE.Busy
' Wait 0.2 second
WScript.Sleep 200
i = i + 1
' Time out after the number of seconds
' specified by the ConnectTimeOut property
If i > m_ConnectTimeOut * 5 Then
blnTimedOut = True
Exit Do
End If
Loop
' Retrieve the URL's text and save it in an array
If Not blnTimedOut Then
arrText = Split( objIE.Document.Body.InnerText, vbCrLf )
End If
' Unless Debug is True, close the Internet Explorer session
If Not m_Debug Then objIE.Quit
Set objIE = Nothing
' Check if a time-out occurred, and return the result
If blnTimedOut = False Then
For i = 0 To UBound( arrText )
' Filter out the lines starting with 3 spaces
Set objRE = New RegExp
objRE.Global = False
objRE.IgnoreCase = True
If LCase( Right( m_DomainName, 4 ) ) = ".org" Then
objRE.Pattern = "^[a-z ]+:.{5,}"
Else
objRE.Pattern = "^ +[a-z ]+: .{5,}"
End If
Set colMatches = objRE.Execute( arrText(i) )
If colMatches.Count = 1 Then
arrLine = Split( arrText(i), ":" )
Select Case Trim( LCase( arrLine(0) ) )
Case "registrar"
arrString = Split( LCase( Trim( arrLine(1) ) ) )
For x = 0 To UBound( arrString )
strString = strString & " " _
& UCase( Left( arrString(x), 1 ) ) _
& Mid( arrString(x), 2 )
Next
m_Registrar = Trim( strString )
Case "sponsoring registrar"
m_Registrar = Trim( Split( arrLine(1), "(" )(0) )
Case "whois server"
m_WhoisServer = Trim( arrLine(1) )
Case "referral url"
m_ReferralURL = Trim( arrLine(1) ) & ":" _
& Trim( arrLine(2) )
Case "name server"
If m_NameServers = "" Then
m_NameServers = LCase( Trim( arrLine(1) ) )
Else
m_NameServers = m_NameServers & "," _
& LCase( Trim( arrLine(1) ) )
End If
Case "status"
strStatus = Trim( arrLine(1) )
If InStr( strStatus, " " ) Then
arrStatus = Split( LCase( strStatus ), " " )
strStatus = arrStatus(0) _
& UCase( Left( arrStatus(1), 1 ) ) _
& Mid( arrStatus(1), 2 ) _
& UCase( Left( arrStatus(2), 1 ) ) _
& Mid( arrStatus(2), 2 )
End If
If m_Status = "" Then
m_Status = Trim( strStatus )
Else
m_Status = m_Status & "," _
& Trim( strStatus )
End If
Case "updated date"
m_DateUpdated = CDate( Trim( arrLine(1) ) )
Case "last updated on"
m_DateUpdated = CDate( Trim( Split( arrLine(1), " " )(0) ) )
Case "creation date"
m_CreationDate = CDate( Trim( arrLine(1) ) )
Case "created on"
m_CreationDate = CDate( Trim( Split( arrLine(1), " " )(0) ) )
Case "expiration date"
If LCase( Right( m_DomainName, 4 ) ) = ".org" Then
m_ExpirationDate = CDate( Trim( Split( arrLine(1), " " )(0) ) )
Else
m_ExpirationDate = CDate( Trim( arrLine(1) ) )
End If
End Select
End If
Set colMatches = Nothing
Set objRE = Nothing
Next
If m_Registrar = "" Then
If Trim( arrText(1) ) = m_DomainName Then
m_ErrorNumber = 10001
m_ErrorDescription = "Unable to extract domain registry info."
m_ErrorSource = "Whois Class " & m_Version
Else
m_ErrorNumber = 10002
m_ErrorDescription = Trim( arrText(1) )
m_ErrorSource = Trim( arrText(0) )
End If
End If
Else
m_ErrorNumber = 462
m_ErrorDescription = "The connection timed out. " _
& "The remote server machine does " _
& "not exist or is unavailable."
If m_ConnectTimeOut < 45 Then
m_ErrorDescription = m_ErrorDescription _
& " Try a longer time-out interval."
End If
m_ErrorSource = "Internet Explorer connection time-out"
End If
End Function
End Class
page last modified: 2024-04-16; loaded in 0.0109 seconds