我正在开发一个c#中的简单应用程序,可以检查域名是否可用于特定tld的购买。 方法:我下载了一个whois-server列表,我将域名发送到协议43上带有TCP客户端的whois服务器,然后检查服务器的答案。 问题:更多国家/地区拥有相同的whois服务器:“whois.ripe.net”。 如果我发送完整的域名(使用tld),服务器的答案始终是“在源RIPE中找不到条目”。如果我发送没有tld的域名,我就不会获得有关域名状态的任何特定数据。
我使用的方法:
private string GetWhoisInformation(string whoisServer, string url)
{
try
{
StringBuilder stringBuilderResult = new StringBuilder();
TcpClient tcpClinetWhois = new TcpClient(whoisServer, 43);
NetworkStream networkStreamWhois = tcpClinetWhois.GetStream();
BufferedStream bufferedStreamWhois = new BufferedStream(networkStreamWhois);
StreamWriter streamWriter = new StreamWriter(bufferedStreamWhois);
streamWriter.WriteLine(url);
streamWriter.Flush();
StreamReader streamReaderReceive = new StreamReader(bufferedStreamWhois);
while (!streamReaderReceive.EndOfStream)
stringBuilderResult.AppendLine(streamReaderReceive.ReadLine());
return stringBuilderResult.ToString();
}
catch
{
return "lekérdezés sikertelen";
}
}
实施例: 我这样做:
GetWhoisInformation("whois.ripe.net", "pokerstars.hu")
服务器的回答:
%ERROR:101: no entries found
%
% No entries found in source RIPE.
用于下一个命令:
GetWhoisInformation("whois.ripe.net", "pokerstars")
结果包含几个这样的块:
% Information related to '80.65.254.128 - 80.65.254.159'
inetnum: 80.65.254.128 - 80.65.254.159
netname: Pokerstars
descr: Hosting
country: GB
admin-c: DC77-RIPE
tech-c: JM2352-RIPE
status: assigned PA
mnt-by: manx-telecom-mnt
changed: bill.hogg@manx-telecom.com 20101123
source: RIPE
没有关于域名“pokerstars.hu”的信息。当然,如果我想查看pokerstars.va,我会得到完全相同的答案。 Pokerstars.hu是一个注册域名,pokerstars.va不是。
如何找到域名的正确状态?
答案 0 :(得分:1)
RIPE不作为任何域的ccTLD whois服务器;像ARIN一样,它只包含网络信息。每个ccTLD都有自己的root whois服务器(或者,也就是说,其中一些没有合适的whois服务 - 例如,西班牙语.es
注册表要求您使用Web客户端,并且使用令人讨厌的CAPTCHA你必须每次都填写。
另请参阅http://www.ripe.net/data-tools/db,但不清楚数据库不包含的内容。
您可以通过whois.iana.org
请求ccTLD的信息来获取权威whois服务器的地址。
vnix$ whois -h whois.iana.org hu | fgrep whois:
whois: whois.nic.hu
答案 1 :(得分:0)
我尝试了针对whois.melbourneit.net的代码,它发现我的某个域名没有问题。我能够重现你在RIPE上运行的问题,所以我在他们的网站上以交互方式尝试了相同的查询 - 并且得到了相同的结果。您的代码没有任何问题。
tripleee是关于whois.nic.hu
的,我成功地使用它来解析pokerstars.hu - 这让我想知道激光是什么,它是RIPE whois服务器的目的。
感谢triplee向我们展示了如何获取ccTLD的whois服务器友好名称。
您可能会觉得这很有用:
using System;
using System.IO;
using System.Net.Sockets;
using System.Text;
namespace Whois
{
class Program
{
static void Main(string[] args)
{
string tldWhoisServer = "whois.iana.org";
string ccTldServer, query = null;
Console.Write("Query> ");
while ((query = Console.ReadLine()) != string.Empty)
{
string tld = query.Substring(query.LastIndexOf('.') + 1);
string foo = GetWhoisInformation(tldWhoisServer, tld);
foo = foo.Remove(0, foo.IndexOf("whois:") + 6).TrimStart();
ccTldServer = foo.Substring(0, foo.IndexOf('\r'));
Console.WriteLine(GetWhoisInformation(ccTldServer, query));
Console.Write("Query> ");
}
}
static string GetWhoisInformation(string whoisServer, string url)
{
try
{
StringBuilder stringBuilderResult = new StringBuilder();
TcpClient tcpClinetWhois = new TcpClient(whoisServer, 43);
NetworkStream networkStreamWhois = tcpClinetWhois.GetStream();
BufferedStream bufferedStreamWhois = new BufferedStream(networkStreamWhois);
StreamWriter streamWriter = new StreamWriter(bufferedStreamWhois);
streamWriter.WriteLine(url);
streamWriter.Flush();
StreamReader streamReaderReceive = new StreamReader(bufferedStreamWhois);
while (!streamReaderReceive.EndOfStream)
stringBuilderResult.AppendLine(streamReaderReceive.ReadLine());
return stringBuilderResult.ToString();
}
catch
{
return "Query failed";
}
}
}
}