VBAfunction连接到WHOIS服务器并返回.com.au域的可用性

我正在为希望快速检查数十个域的可用性的客户创build一个模板。 模板必须保持为excel文件。

我已经安装并使用了SEOToolsForExcel,它允许我查询服务器,并使用isdomainregistered()函数检查特定域是否可用。 然而,不幸的是,该函数将始终返回所有投向它的澳大利亚('.com.au')域的“真实”(即域)。 我已经尝试更改xmlconfiguration文件中的TLD查找,如本页所示: http : //seotoolsforexcel.com/how-to-setup-tlds-in-seotools-config-xml/

我尝试了以下几点:

<Tld Name="au" WhoIsServer="whois.aunic.net" WhoIsNotFoundRegex="(no match)|(no data found)|(not found)|(no entries found)|(error for)|(invalid pattern)|(illegal question)" WhoIsCreatedRegex="" WhoIsUpdatedRegex="(?:Last Modified:\s*(\d{2}-[Az]{3}-)\d{4})" WhoIsExpiresRegex="" WhoIsDelayMs="1000" /> 

和这个:

 <Tld Name="au" WhoIsServer="whois-check.ausregistry.net.au" WhoIsNotFoundRegex="is free" WhoIsCreatedRegex="" WhoIsUpdatedRegex="" WhoIsExpiresRegex="" WhoIsDelayMs="1000" /> 

但似乎都没有奏效。 我已经检查了其他服务,清楚地表明域名可用,但SEOTool保持返回错误的结果(只在“.com.au”域名,.com域名工作正常)。

因此,我的下一个尝试是在excel中编写一个自定义函数,将其发送到Ausregistry.com.au服务器的域可用性工具。

Ausregistry解释了如何在他们的页面中完成这个工作: http ://www.ausregistry.com.au/tools/domain-availability

他们解释说:

该服务将根据域名的可用性,以string“可用”或“不可用”进行响应。

例如

要检查ausregistry.net.au的可用性,请按照下列步骤操作:

  • 连接到:地址:whois-check.ausregistry.net.au,端口:43

  • 将string“ausregistry.net.au \ r \ n”发送到服务器

  • 服务器将以“不可用”响应,然后closures连接。

上述程序与标准WHOIS协议兼容; 因此任何使用WHOIS构build的转销商界面都可以使用该系统。 或者,标准* nix whois命令可以使用如下:whois -h

我已经在VBA中编写了很多代码,但是我不知道如何实现这个连接到服务器,以及如何把它的域string,然后读取结果。 我会很感激关于如何使用VBA实现这一点的任何信息。

更新。 我在几个月前解决了这个问题,并认为我会发布我的解决scheme,以防有人绊倒这一点。 @Lumigraphics,幸好我没有学习PERL。 我使用了OstroSoft Winsock组件(你可以在这里find它)。

以下UDF:

 Function AusRegDomainAvailable(DomainUrl As String) As Boolean Dim sPage As String Dim sServer As String Dim nPort As Long Dim AusRegistryServer As String Dim ReturningData As String Dim wsTCP As OSWINSCK.Winsock Dim FixedDomain As String Dim Timelimit As Date QueryTimeOut = False FixedDomain = Replace(DomainUrl, "www.", "") FixedDomain = Replace(FixedDomain, "http://", "") FixedDomain = Replace(FixedDomain, "https://", "") AusRegistryServer = "whois-check.ausregistry.net.au" nPort = 43 sServer = Trim(AusRegistryServer) If InStr(sServer, "://") > 0 Then sServer = Mid(sServer, InStr(sServer, "://") + 3) If InStr(sServer, "/") > 0 Then sPage = Mid(sServer, InStr(sServer, "/") + 1) sServer = Left(sServer, InStr(sServer, "/") - 1) End If If InStr(sServer, ":") > 0 Then nPort = Mid(sServer, InStr(sServer, ":") + 1) sServer = Left(sServer, InStr(sServer, ":") - 1) End If If sServer = "" Then Err.Raise 12001, , "Invalid URL" Set wsTCP = CreateObject("OSWINSCK.Winsock") wsTCP.Connect sServer, nPort Do Until wsTCP.State = 7 DoEvents If wsTCP.State = sckError Then Exit Function End If Loop wsTCP.SendData FixedDomain & vbCrLf Timelimit = (Now + TimeValue("0:00:02")) Do Until wsTCP.Status = "Data Arrival" Or Now > Timelimit DoEvents If wsTCP.State = sckClosed Then QueryTimeOut = True Exit Function End If Loop wsTCP.GetData ReturningData ReturningData = Replace(ReturningData, vbLf, "") ReturningData = Replace(ReturningData, vbCr, "") ReturningData = Trim(ReturningData) If ReturningData = "Available" Then AusRegDomainAvailable = True ElseIf ReturningData = "Not Available" Then AusRegDomainAvailable = False Else QueryTimeOut = True AusRegDomainAvailable = Null End If DoEvents Debug.Print FixedDomain & " " & ReturningData wsTCP.CloseWinsock Exit Function ErrHandler: AusRegDomainAvailable = "Error " & Err.Number & ": " & Err.Description End Function